Gå til innhold

Trenger hjelp med while løkke.


Anbefalte innlegg

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
Videoannonse
Annonse

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

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 av srbz
Lenke til kommentar

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

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: 20

Celsius: 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 av srbz
Lenke til kommentar

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

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 av srbz
Lenke til kommentar

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: 20

Celsius | 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 av srbz
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...