13 svar
387 visningar
saga behöver inte mer hjälp
saga 6 – Fd. Medlem
Postad: 19 sep 2020 19:57

Vilken string java metod gör detta?

Jag ska få strängen: 

-20/1 ---->omvandla till sträng genom heltalsdivision --->"-200"-----> lägg en decimal -->  -20.0

en decimal för att funktionen tar en parameter n som bestämmer hur många decimaler ovanför är n=1

en annan sträng kan vara 

1/1000--->omvandla till sträng genom heltalsdivision --->"10"-----> 0.0001

eftersom n=4; 

vilken string metod kan göra detta? 

Peter 1023
Postad: 19 sep 2020 23:29

Det är nog ingen som förstår vad du menar. Kan du omformulera dig?

saga 6 – Fd. Medlem
Postad: 19 sep 2020 23:36

Jag har en sträng:

String string=”0.-20” 

med hjälp av någon string metod ska jag skriva om denna sträng till:

-20.0 
likaså om jag har strängen:

String m= ”0. 1”

ska skrivas om till:

0.0001

Jag tror man använder string.format men har svårt att förstå hur? 

Lindehaven 820 – Lärare
Postad: 21 sep 2020 11:06 Redigerad: 21 sep 2020 12:47

Med metoden split() kan strängen delas i de två delarna, d v s delen före "/" och delen efter "/".

Första delen kan sedan omvandlas från sträng till flyttal med metoden parseFloat().

Längden av andra delen ges av metoden length().

Sedan gör man flyttalsdivision mellan första delen och 10 upphöjt i längden av andra delen.

saga 6 – Fd. Medlem
Postad: 21 sep 2020 15:34

Problemet är att man får inte använda float eller double i denna uppgift. 

Utan man får bara använda int och String. 

Hur gör jag det utan att behöva omvandla till float eller double? 

Lindehaven 820 – Lärare
Postad: 21 sep 2020 17:47

När jag nu tittar närmare på dina beskrivningar av uppgiften så ser jag att de inte överensstämmer och att ingen av dem tydliggör vilka resultat som ska ges.

Om man har en sträng redan, varför ska man då "omvandla till sträng"?

Hur kan omvandling av "-20/1" bli "-200"? Om man har strängen "0.-20" (konstigt format!),  hur kommer det sig att den ska bli "-20.0"?

Hur kan omvandling av "1/1000" bli "10"? Om man har strängen "0.1", hur kommer det sig att den ska bli "0.0001"?

Det tal som står efter "/", är det ett värde som man ska dividera med eller anger antalet siffror (n) i det talet endast antal decimaler? Med andra ord, om det står "1/5" betyder det att svaret ska bli "0.2" eller "0.1"?

Det går att omvandla strängar till heltal också om det behövs.

saga 6 – Fd. Medlem
Postad: 21 sep 2020 17:51

Det här är frågan som ställdes i uppgiften:

"En metod toDotString som tar en parameter decimalCount av typen int som input och returnerar en sträng med värdet avrundad neråt avrundad mot noll representerat som ett vanligt decimal tal med så många decimaler som är angett i decimalCount. Exempel: 2/3 för decimalCount angett som 3 bör returnera 0.666. Tips: använd heltals aritmetik för att beräkna talet som ska visas utan punkten; omvandla till sträng och pussla ihop retur strängen med hjälp av sträng funktioner från Javas API. Se till att negativa tal och små tal som 1/100 ger rätt returvärde"

och då har min lärare sagt: "multiplicera med 10 så mångga gånger att decimal delen kommer fram, sen kö du heltals division. tex om du skriver 2/3 med 2 decimaler kan man multiplicera med 10 två gånger, då får man 200/3, om man kör detta med heltals division får man 66. omvandla 66 till en sträng och lägg till "0.". 

men de funkar inte för större tal eller då tal med - i början. 

Laguna Online 30482
Postad: 21 sep 2020 19:08

Det står "metod" men vilken klass är det som ska ha den här metoden? 

Lindehaven 820 – Lärare
Postad: 21 sep 2020 20:04
saga skrev:

"En metod toDotString som tar en parameter decimalCount av typen int som input och returnerar en sträng med värdet avrundad neråt avrundad mot noll representerat som ett vanligt decimal tal med så många decimaler som är angett i decimalCount. Exempel: 2/3 för decimalCount angett som 3 bör returnera 0.666. ..."

Så, uppgiften är något helt annat än vad du beskrev.

Eftersom ordet "metod" används så undrar jag, som Laguna, hur klassen ser ut? 

Utan värden på täljare och nämnare så räcker inte enbart parametern decimalCount för att lösa uppgiften. De ligger antagligen som privata attribut i klassen?

Lindehaven 820 – Lärare
Postad: 22 sep 2020 13:09

Låt säga att det finns en klass med privata attribut för täljare och nämnare.

Att "multiplicera med 10 så många gånger att decimaldelen kommer fram" kan göras med Math.pow() men den opererar med två parametrar av klassen double och returnerar en double så den är diskvalificerad. Men, det är enkelt att skriva en egen pow()-funktion som tar parametrar av klassen int och returnerar en long. Använd förslagsvis klassen long så kan större värden hanteras.

Sedan kan heltalsdivisionen göras: kvot = täljare * pow(10, decimalCount) / nämnare

Ta hänsyn till följande när du sedan gör om kvoten till en sträng:

  1. Om kvoten är negativ, då ska strängen inledas med "-". Ingen överraskning där.
  2. Om absolutvärdet av kvoten är lägre än 1, då ska strängens fortsättning vara "0." och fyllas på med lämpligt antal nollor innan absolutvärdet av kvoten läggs sist i strängen. "Lämpligt antal nollor" beror av hur många siffror som kvoten får och hur många decimaler man vill ha.
  3. Om absolutvärdet av kvoten är 1 eller högre, då ska strängens fortsättning vara absolutvärdet av kvoten med decimalpunkt på lämpligt ställe och lämpligt antal nollor på slutet. "Lämpligt ställe" och "lämpligt antal nollor" beror av hur många siffror som kvoten får och hur många decimaler man vill ha.

Utmaningen ligger i att koda punkt 2 och 3.

Jag provade koda en lösning och använde mig då av metoderna abs(), valueOf(), length() och substring() samt strängoperatorn +. Är inte någon erfaren Java-programmerare så jag har kanske komplicerat till det i onödan.

saga 6 – Fd. Medlem
Postad: 22 sep 2020 20:46

Tusen tack löste det!

Lindehaven 820 – Lärare
Postad: 22 sep 2020 21:50 Redigerad: 22 sep 2020 21:50

Vad bra! Visa gärna vilka värden du använde för att testa din lösning.

saga 6 – Fd. Medlem
Postad: 22 sep 2020 21:52

1/2, 2/3, -20/1, -11/10000, 7000/67, 89/99 

använde jag, bland annat för att testa lösningen! 

Lindehaven 820 – Lärare
Postad: 23 sep 2020 09:12

Det är bra att du testar med olika värden och olika antal decimaler. Prova gärna att omvandla dessa kvoter med 0, 10 och 15 decimaler för att se om ditt program fortfarande fungerar.

Svara
Close