Gå til innhold

hvordan legge til while løkke


Anbefalte innlegg

Læreboken jeg benytter i programmering forklarer svært lite hvordan dette fungerer, derfor må jeg ty til hjelp her nok en gang.

Jeg har følgende kode, denne regner ut hvor langt en gjenstand har falt - gitt tid og omvendt.

F.eks: tidsintervall 20, kjøring = tid: 20, 40, 60, 80, 100 Distanse: ....

 

 

(while løkken som ligger der var bare for å teste om det funket, noe det naturligvis ikke gjorde.)

 

import java.util.Scanner;  // <- metode for å konvertere bytes til primitive verdier.
public class Distanse_versjon2 {
 public static void main(String[] args) {

   Scanner tastatur = new Scanner(System.in);
   System.out.println("Angi tid i sekunder: "); // <- skriver ut
   final double g = 9.81; //konstant til g
  int test = 0;

   while (test >5); {

   double tid = tastatur.nextDouble(); //leser tastaturet
   double distanse = (g* Math.pow(tid,2)/2.0); //Gjør regneoperasjoner. Math.pow, opphøyer verdien i tid i 2 (tid^2)

   System.out.printf(" Distansen i meter etter " + tid + " sekunder i fritt fall er %.1f", distanse );  //skriver ut resultat 
   }
   System.out.println(".    Angi distanse i meter:"); //skriver ut
   double distanse2 = tastatur.nextDouble(); //leser tastaturet
   double tid2 = Math.sqrt((2*distanse2)/g); //gjør regneoperasjon 
   System.out.printf("Tiden i fritt fall: %.1f sekunder", tid2); //skriver ut tekst og svaret på regneoperasjonen


 }
}

Det jeg ønsker skal kunne gjøres er at programmet skriver ut verdier for t, t2, t3,t4 og t5 sekunder. Tidsintervallet (t) skal kunne skrives inn av bruker. Hvordan kan dette gjøres?

Endret av 13375k1133z
Lenke til kommentar
Videoannonse
Annonse

Inkrementere = Øke.

 

test = 0

 

når du kjører while (test <= 5) så må du øke test for å ikke ha en uendelig loop.

 

Hvis du ikke øker test så vil test alltid være mindre eller lik 5. Skjønner?

 

Du må da, inne i while-løkken gjøre noe som test++; for å øke med 1, eventuelt test += 1; vil gjøre det samme.

Lenke til kommentar

Takker!

jeg har skrevet følgende:

import java.util.Scanner;  // <- metode for å konvertere bytes til primitive verdier.
public class Distanse_versjon2 {
 public static void main(String[] args) {

   Scanner tastatur = new Scanner(System.in);
   System.out.println("Angi tid i sekunder: "); // <- skriver ut
   final double g = 9.81; //konstant til g
  int test  = 0;

   while (test <=5); {

   double tid = tastatur.nextDouble(); //leser tastaturet
   double distanse = (g* Math.pow(tid,2)/2.0); //Gjør regneoperasjoner. Math.pow, opphøyer verdien i tid i 2 (tid^2)
   test++;
   System.out.printf(" Distansen i meter etter " + tid + " sekunder i fritt fall er %.1f", distanse );  //skriver ut resultat 
   }
   System.out.println(".    Angi distanse i meter:"); //skriver ut
   double distanse2 = tastatur.nextDouble(); //leser tastaturet
   double tid2 = Math.sqrt((2*distanse2)/g); //gjør regneoperasjon 
   System.out.printf("Tiden i fritt fall: %.1f sekunder", tid2); //skriver ut tekst og svaret på regneoperasjonen


 }
}

programmet kompilerer, men vil ikke kjøre.

Lenke til kommentar

Føler meg burnet :) takker uansett for hjelpen. håper det er noen andre her som kan hjelpe meg slik at jeg får skrevet ut en tabell slik som nevnt i post 9.

 

Ikke helt sikker på hva du mener, men du kan deklarere en tabell før while-løkken slik:

double[] arrTid2 = new double[6]; // 6 celler fra 0-5

inni while-løkka tar du vare på verdien du vil skrive ut i tabellen:

arrTid2[test] = tid2;

og etter while-løkka kan du skrive ut fra tabellen, men da må du ha ennå en løkke for å gå gjennom tabellen:

for (int i = 0; i <= 5; i++) {
  System.out.println(arrTid2[i]);
}

Lenke til kommentar

Takker, når jeg skriver ut følgende kode :

import java.util.Scanner;  // <- metode for å konvertere bytes til primitive verdier.
public class versjon3 {
 public static void main(String[] args) {

   Scanner tastatur = new Scanner(System.in);
   System.out.println("Angi tid i sekunder: "); // <- skriver ut
   final double g = 9.81; //konstant til g
   int test  = 0;

   double[] arrTid = new double[6]; // 6 celler fra 0-5

   while (test <=5) {
     test ++;
     double tid = tastatur.nextDouble(); //leser tastaturet
     double distanse = (g* Math.pow(tid,2)/2.0); //Gjør regneoperasjoner. Math.pow, opphøyer verdien i tid i 2 (tid^2)

     arrTid[test] = tid;

     for (int i = 0; i <= 5; i++) {
  System.out.println(arrTid[i]);
     }

   }
   System.out.println(".    Angi distanse i meter:"); //skriver ut
   double distanse2 = tastatur.nextDouble(); //leser tastaturet
   double tid2 = Math.sqrt((2*distanse2)/g); //gjør regneoperasjon 
   System.out.printf("Tiden i fritt fall: %.1f sekunder", tid2); //skriver ut tekst og svaret på regneoperasjonen


 }
}

 

Det jeg ønsker koden skal gjøre er at det blir skrevet ut en tabell når du skriver inn ulike verdier.

Altså skriver du inn f.eke:

2o, kommer følgende ut i output:

 

Angi tid i sekunder: 10,5

Distansen etter 10,5 sekunder i fritt fall: 540,8 meter

Tidsintervall i sekunder: 20,00

Omregningstabell: Tid [sek] | Distanse [m]

20,0 | 1962,0

40,0 | 7848,0

60,0 | 17658,0

80,0 | 31392,0

100,0 | 49050,0

Lenke til kommentar

For det første må du ikke ha for-løkka som skriver ut fra tabellen inni while løkka, da vil den spytte ut den delvis utfyllte tabellen for hver omgang i while-løkka. Du må isteden ha for-løkka *etter* while-løkka, og selvfølgelig også etter de utskriftene du vil ha før tabell-utskriften.

 

Hvis du skal skrive ut en tabell med to kolonner (og 5 rader), deklarerer du den slik

 

double[][] dblArrUtskrift = new double[6][2];

inni while-løkka samler du opp verdier som før

dblArrUtskrift[test][0] = verdiTilVenstreKolonne; // her velger du seff selv noe annet
dblArrUtskrift[test][1] = verdiTilHoyreKolonne; // ----------"----------------

og så ETTER while-løkka og evt. andre utskrifter som du vil ha ut først plasserer inni for-løkka di utskriften

for (blabla) {
  System.out.println(dblArrUtskrift[i][0] + "|" + dblArrUtksrift[i][1]);
}

Lenke til kommentar

Takker for all hjelp / tilbakemeldinger!

No har jeg komt opp med følgende kode:

import java.util.Scanner;  // <- metode for å konvertere bytes til primitive verdier.
public class Distansee {
 public static void main(String[] args) {

   Scanner tastatur = new Scanner(System.in);
   System.out.println("Angi tid i sekunder: "); // <- skriver ut
   final double g = 9.81; //konstant til g
   int test  = 0;

   double[][] dblArrUtskrift = new double[6][2];

   while (test <=5) {
     test ++;
     double tid = tastatur.nextDouble(); //leser tastaturet
     double distanse = (g* Math.pow(tid,2)/2.0); //Gjør regneoperasjoner. Math.pow, opphøyer verdien i tid i 2 (tid^2)

     dblArrUtskrift[test][6] = tid; // her velger du seff selv noe annet
     dblArrUtskrift[test][2] = distanse; // ----------"----------------


     for (int i = 0; i <= 5; i++) {
  System.out.println(dblArrUtskrift[i][0] + "|" + dblArrUtskrift[i][1]);
     }



   }
   System.out.println(".    Angi distanse i meter:"); //skriver ut
   double distanse2 = tastatur.nextDouble(); //leser tastaturet
   double tid2 = Math.sqrt((2*distanse2)/g); //gjør regneoperasjon 
   System.out.printf("Tiden i fritt fall: %.1f sekunder", tid2); //skriver ut tekst og svaret på regneoperasjonen


 }
} 

 

Men får dessverrre litt error, når det kompileres får jeg følgende feilmelding :

 

java.lang.ArrayIndexOutOfBoundsException: 6

at Distansee.main(Distansee.java:17)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

 

noen som kan hjelpe meg ?

Endret av 13375k1133z
Lenke til kommentar

double[][] arrDouble = new double[6][2];
arrDobule[her kan du ha tall fra 0 til 5][her kan du ha tall fra 0 til 1] = etellerannet;

Hvis du prøver å referere til plasser som er «utenfor» tabellen, slik som du gjør, får du ArrayIndexOutOfBoundsException. Hvis du klarer å bytte ut

     dblArrUtskrift[test][6] = tid; // her velger du seff selv noe annet
     dblArrUtskrift[test][2] = distanse; // ----------"----------------

med det jeg foreslo i forrige post løser det seg.

 

Og, igjen, utskriften i for-løkka (inkl. løkka) skal ikke være inni while-løkka.

Lenke til kommentar

double[][] arrDouble = new double[6][2];
arrDobule[her kan du ha tall fra 0 til 5][her kan du ha tall fra 0 til 1] = etellerannet;

Hvis du prøver å referere til plasser som er «utenfor» tabellen, slik som du gjør, får du ArrayIndexOutOfBoundsException. Hvis du klarer å bytte ut

     dblArrUtskrift[test][6] = tid; // her velger du seff selv noe annet
     dblArrUtskrift[test][2] = distanse; // ----------"----------------

med det jeg foreslo i forrige post løser det seg.

 

Og, igjen, utskriften i for-løkka (inkl. løkka) skal ikke være inni while-løkka.

No har jeg flyttet koden som er skrevet under, men jeg er usikker på det andre du sier jeg skal gjøre, kunne du forklart litt nærmere?

for (int i = 0; i <= 5; i++) {
  System.out.println(dblArrUtskrift[i][0] + "|" + dblArrUtskrift[i][1]);
   } 

utenfor løkken.

Koden ser slik ut no:

import java.util.Scanner;  // <- metode for å konvertere bytes til primitive verdier.
public class Distansee {
 public static void main(String[] args) {

   Scanner tastatur = new Scanner(System.in);
   System.out.println("Angi tid i sekunder: "); // <- skriver ut
   final double g = 9.81; //konstant til g
   int test  = 0;

   double[][] dblArrUtskrift = new double[6][2];

   while (test <=5) {
     test ++;
     double tid = tastatur.nextDouble(); //leser tastaturet
     double distanse = (g* Math.pow(tid,2)/2.0); //Gjør regneoperasjoner. Math.pow, opphøyer verdien i tid i 2 (tid^2)

     dblArrUtskrift[test][5] = tid; // her velger du seff selv noe annet
     dblArrUtskrift[test][1] = distanse; // ----------"----------------


     }

     for (int i = 0; i <= 5; i++) {
  System.out.println(dblArrUtskrift[i][0] + "|" + dblArrUtskrift[i][1]);
   }
   System.out.println(".    Angi distanse i meter:"); //skriver ut
   double distanse2 = tastatur.nextDouble(); //leser tastaturet
   double tid2 = Math.sqrt((2*distanse2)/g); //gjør regneoperasjon 
   System.out.printf("Tiden i fritt fall: %.1f sekunder", tid2); //skriver ut tekst og svaret på regneoperasjonen


 }
} 

programmet får fortsatt de samme feilmeldingene. bytter jeg verdi i dblArrUtskrift[test][5] til [0]kommer det ikke noen feilmelding når jeg skriver inn tall i input, men programmet lager ingen tabell.

Endret av 13375k1133z
Lenke til kommentar

Nei, når du har fiksa det så er du jo innenfor grensene for tabellen, så da er det i orden. Hvorfor du ikke får noe utskrift fra for-løkka skjønner jeg ikke helt. Kan du legge inn to println'er sist i while løkka som skriver ut hhv tid og distanse variablene, så vi kan se om de har noen verdi når de blir putta inn i dblArrUtskrift[][]?

Endret av quantum
Lenke til kommentar

Å endre dblArrUtskrift[test][5] til dblArrUtskrift[test][0] er det første du må gjøre.

 

Videre så forventer programmet at du skriver inn 6 tall. Dvs du må trykk f.eks. 1, 2, 4, 2, 7 og 9 - med enter etter hvert tall.

 

Du vil da oppdage at du har en feil til ;)

Den feilen kommer av følgende kodesnutt:

int test = 0;
while (test <=5) {
     test ++;
     // mer kode
}

 

Feilen her ligger i at det første du gjør i løkken, er å øke verdien til test. test har dermed verdien 1 første gangen du er i løkken. Den sjette gangen du går i gjennom løkken så har test verdien 6.

Når du lager en array som "double[] minArray = new double[6];" så har du 6 plasser. De kan du bruke vha minArray[0] til minArray[5]. I løkken din så starter du på minArray[1] og slutter på minArray[6]. Den siste er da utenfor arrayen og du får en feil. Når du har rettet dette, så vil ting fingere :)

Lenke til kommentar

@13375k1133z vet ikke om det var deg jeg hjalp med samme oppgave i et annet forum.

Poster det samme her.

Du gjør nok dette litt vanskligere enn det er.

Tar det i python,som du ser er mindere verbose enn java.

 

import math

g = 9.81
Tidsintervall = 20
set_max = 120
tid = input('Angi tid i sekunder: ')

for i in range(tid,set_max,Tidsintervall):
   distanse = (g* math.pow(i,2)/2.0)
   print'%s | %s' % (i, distanse)

'''Out-->
20 | 1962.0
40 | 7848.0
60 | 17658.0
80 | 31392.0
100 | 49050.0
'''

 

Så hvordan skrive dette om til java.

Som du ser bruker jeg bare en for loop.

Setter inn variablene og så lager jeg samme for loopen med java

 

#python 
for i in range(20,120,20):
   print i
   #-->20,40,60,80,100

#java
for (int i = 20; i <= 100; i+=20) {
    System.out.println(i);}
    #-->20,40,60,80,100

Her ligger mye av løsning i denne oppgaven.

Som du ser distanse utregningen linjen er nogelunde lik.

Da trenger du bare og finne en format løsning på System.out.printf

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...