13375k1133z Skrevet 2. februar 2011 Del Skrevet 2. februar 2011 Har et lite problem med en while løkke. Det programmet skal gjøre er: du skal kunne taste inn et temperaturintervall, f.eks: 20grader. Deretter skal intervallet økes 5 ganger. (20, 40, 60, 80, 100) (skal også skrives ut i farenheit. hvordan kan dette gjøres? Har gjort et lite forsøk, men det gikk dessverre ikke så bra: import java.text.DecimalFormat;import java.util.Scanner; class temperatur { public static void main (String[]args ) { Scanner tastatur = new Scanner (System.in); double temperatur; double farenheit; double sum; System.out.print("Temperatur i celcius"); temperatur = tastatur.nextDouble(); farenheit = (temperatur * 1.8) + 32; int teller; teller = 5; while (teller < 5) { sum = tastatur + temperatur; teller = teller + 1; } System.out.println(sum); } } noen som kan hjelpe? Lenke til kommentar
Thorsen Skrevet 2. februar 2011 Del Skrevet 2. februar 2011 (endret) Sett teller = 1 (eventuelt 0) når du starter. Eller tell nedover i løkka og endre den logiske testen. Hvis du skal printe for hver gang må også print linja inn i while løkka Endret 2. februar 2011 av Thorsen Lenke til kommentar
13375k1133z Skrevet 2. februar 2011 Forfatter Del Skrevet 2. februar 2011 tingen er at jeg får feilmelding -.- Lenke til kommentar
miXer Skrevet 2. februar 2011 Del Skrevet 2. februar 2011 (endret) Vil tippe du får feilmelding forde du prøver å plusse sammen et scanner objekt med en double verdi while (teller < 5) { sum = tastatur + temperatur; teller = teller + 1; } Endret 2. februar 2011 av miXer Lenke til kommentar
13375k1133z Skrevet 2. februar 2011 Forfatter Del Skrevet 2. februar 2011 Vil tippe du får feilmelding forde du prøver å plusse sammen et scanner objekt med en double verdi while (teller < 5) { sum = tastatur + temperatur; teller = teller + 1; } Virker som dette stemmer, men hvordan kan jeg gjøre om koden til å gjøre det jeg ønsker? Hvordan kan jeg skrive ut intervallet av en gitt temperatur, slik som nevnt i første post? Lenke til kommentar
srbz Skrevet 3. februar 2011 Del Skrevet 3. februar 2011 (endret) Jeg er usikker på hva du egentlig ønsker med koden. while (teller < 5) { sum = tastatur + temperatur; teller = teller + 1; } Merk at sum vil ha samme verdi her uansett hva teller er. Så lenge du ikke endrer de andre variablene vil ikke summen endres heller. Rent bortsett fra at tastatur ikke er int, og at det dermed ikke vil virke i utgangspunktet: så lenge verken tastatur eller temperatur endres underveis i løkken vil sum ha samme verdi etter fem iterasjoner som den vil ha etter én. Si for eksempel at tastatur har verdien 2 og temperatur har verdien 3. Etter første iterasjon vil da sum ha verdi 5, tastatur verdi 2 og temperatur verdi 3. Uansett hvor mange ganger du itererer gjennom denne løkken vil tastatur ha verdi 2 og temperatur verdi 3, derfor vil sum bli 5 hver gang. Forøvrig er teller++ en annen måte å skrive at teller = teller + 1 Så lenge du ikke har noe i while-løkken som tar vare på variablene du genererer eller skriver dem ut, så vil variablene også forsvinne og du vil kun sitte igjen med det siste resultatet av utregningen sum = tastatur + temperatur (eller whatever). Mao. ville du trolig ha fått samme resultat av å bare skrive om denne linjen og gange med 5 et sted (avhengig av hva du egentlig prøver å oppnå). En ting til: først setter du teller til å være 5, deretter skriver du en while-løkke som utføres hver gang teller er mindre enn 5. Teller blir jo aldri mindre enn 5! Følgelig vil du også her få en feilmelding, for sum vil aldri få noen verdi. int sum initieres utenfor while-løkken uten at du gir den noen verdi, du kommer aldri inn i while-løkken, og til slutt prøver du å skrive ut variabelen sum som ikke har noen verdi. Endret 3. februar 2011 av srbz Lenke til kommentar
13375k1133z Skrevet 3. februar 2011 Forfatter Del Skrevet 3. februar 2011 Takker for tilbakemelding! Får beskrive nok en gang hva jeg ønsker programmet skal gjøre: Du skal kunne taste inn et temperaturintervall, f.eks 20 grader. Deretter skal intervallet av 20 skrives ut, 5 "ganger". f.eks på kjøring: intervall: 20 20 40 60 80 100 Hvordan kan jeg få while løkken til å gjøre dette? Lenke til kommentar
srbz Skrevet 3. februar 2011 Del Skrevet 3. februar 2011 (endret) Altså, hvis jeg nå har forstått deg riktig skal du først skrive inn en temperatur x, deretter skal programmet skrive ut x, 2x, 3x, 4x og 5x? for(int i=1; i<=5; i++){ System.out.println("Temperatur: " + (i*temperatur) + " grader celcius"); } istedenfor while-løkken, med int teller og alt det der. edit: Du skal ha med fahrenheit og, det glemte jeg. Fullstendig kode kan da eksempelvis bli noe som dette: import java.util.Scanner; public class Temperatur { public static void main(String[] args) { System.out.print("Temperatur i celsius: "); Scanner tastatur = new Scanner(System.in); double celsius = tastatur.nextDouble(); for(int i=1; i<=5; i++){ double nyCelsius = celsius*i; double fahrenheit = nyCelsius * 1.8 + 32; System.out.println("Celsius: " + nyCelsius + ", Fahrenheit: " + fahrenheit); } } } Utskrift av konsoll: Temperatur i celsius: 20Celsius: 20.0, Fahrenheit: 68.0 Celsius: 40.0, Fahrenheit: 104.0 Celsius: 60.0, Fahrenheit: 140.0 Celsius: 80.0, Fahrenheit: 176.0 Celsius: 100.0, Fahrenheit: 212.0 Er det noe slikt du er på jakt etter? Endret 3. februar 2011 av srbz Lenke til kommentar
13375k1133z Skrevet 3. februar 2011 Forfatter Del Skrevet 3. februar 2011 Takker for hjelp. Fikk til slutt til å gjøre det med while løkke. Da er det siste spørsmålet: hvordan kan jeg skrive ut resultatet for både farenheit og celcius i en tabell (slik at det blir oversiktlig)? koden ser slik ut: import java.text.DecimalFormat;import java.util.Scanner; class temperatur_oppdatering { public static void main (String[]args ) { Scanner tastatur = new Scanner (System.in); double temperatur; double farenheit; double sum; double sum2; System.out.print("Temperaturintervall i celcius"); temperatur = tastatur.nextDouble(); farenheit = (temperatur * 1.8) + 32; int teller; teller = 0; while (teller < 5 ) { teller ++; sum = temperatur*teller; sum2 = farenheit*teller; DecimalFormat df = new DecimalFormat ("###.#"); System.out.println(df.format(sum)); System.out.println(df.format(sum2)); } } } Lenke til kommentar
srbz Skrevet 3. februar 2011 Del Skrevet 3. februar 2011 (endret) import java.text.DecimalFormat; import java.util.Scanner; class temperatur_oppdatering { public static void main (String[]args ) { Scanner tastatur = new Scanner (System.in); double temperatur; double farenheit; double sum; double sum2; System.out.print("Temperaturintervall i celcius"); temperatur = tastatur.nextDouble(); farenheit = (temperatur * 1.8) + 32; int teller; teller = 0; while (teller < 5 ) { teller ++; sum = temperatur*teller; sum2 = farenheit*teller; DecimalFormat df = new DecimalFormat ("###.#"); System.out.println(df.format(sum)); System.out.println(df.format(sum2)); } } } Du trenger ikke å initiere variablene i forkant slik du gjør her. Du kan like gjerne skrive "int teller = 0;" Unntaket er dersom verdien av en variabel skal endres i en løkke og er avhengig av verdien etter en tidligere iterering. Skriver du f.eks. int i=0; while(i<3){ int sum = sum + i; } vil du få feilmelding. For utskriften sin del kan du vel bruke printf og gi utskriften et fixed antall tegn (som fyller overflødige tegnplasser med mellomrom og venstrejusterer teksten), slik at hver linje blir like lang? Endret 3. februar 2011 av srbz Lenke til kommentar
13375k1133z Skrevet 3. februar 2011 Forfatter Del Skrevet 3. februar 2011 Takker for tilbakemelding. Jeg ønsker at utskriften skal være noe ala: Temperaturintervall i Celsius: 20,25 Celsius | Farenheit 20,25 | 68,45 40,50 | 104,90 60,75 | 141,35 81,00 | 177,80 101,25 | 214,2 Hvordan gjøres dette? Lenke til kommentar
srbz Skrevet 3. februar 2011 Del Skrevet 3. februar 2011 (endret) For å ta utgangspunkt i din egen foreløpige løsning: 1. Av konvensjon starter man klassenavn i Java med stor forbokstav. 2. Har komprimert selve kildekoden ved å fjerne unødvendige deklarasjoner og heller deklarere der variablene brukes for første gang. 3. Endret argumentet til DecimalFormat slik at det tvinger inn to desimaler. 4. System.out.printf, slik jeg har skrevet det nå, printer variablene som 6 tegn. Dersom variablene er kortere enn 7 tegn vil strengen fylles med mellomrom på høyre side slik at den til sammen blir 7 tegn lang. På denne måten vil den vertikale streken i midten være på samme plass nedover. (Vises ikke her på forumet da hvert tegn ikke har samme bredde med denne skriften) 5. Trimmet koden, tatt vekk unødvendig spacing osv så det ser pent ut import java.text.DecimalFormat; import java.util.Scanner; class Temperatur { public static void main (String[] args) { Scanner tastatur = new Scanner (System.in); System.out.print("Temperaturintervall i celcius: "); double temperatur = tastatur.nextDouble(); double farenheit = (temperatur * 1.8) + 32; System.out.println("Celsius | Fahrenheit"); int teller = 0; while (teller < 5 ) { teller ++; DecimalFormat df = new DecimalFormat ("#.00"); String dfTemperatur = df.format(temperatur*teller); String dfFahrenheit = df.format(farenheit*teller); System.out.printf("%-7s | %-7s", dfTemperatur, dfFahrenheit); System.out.println(); } } } Utskrift av konsoll: Temperaturintervall i celcius: 20Celsius | Fahrenheit 20,00 | 68,00 40,00 | 136,00 60,00 | 204,00 80,00 | 272,00 100,00 | 340,00 Og for ordens skyld: løsningen din med while-løkke gjør nøyaktig det samme som for-løkken i det forrige innlegget mitt (deklarerer en tellevariabel, itererer hver gang kriteriet er oppfylt, og inkrementerer variabelen). Forskjellen er at i en for-løkke vil inkrementeringen utføres etter selve løkken, altså måtte du startet variabelen på 0 og satt <=5 som kriterie isteden, siden det aller første du gjør i while-løkken er å inkrementere. Endret 3. februar 2011 av srbz Lenke til kommentar
miXer Skrevet 3. februar 2011 Del Skrevet 3. februar 2011 Good practice er å bruke for loop når du vet hvor mange ganger du skal iterere. While når du ikke vet hvor mange ganger du skal iterere eller om koden skal kjøres i det hele tatt, og do...while når du ikke vet hvor mange ganger du skal iterere, men koden skal kjøres ihvertfall en gang. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå