anderskk Skrevet 20. september 2006 Del Skrevet 20. september 2006 Jeg er ny i Java, og har fått en oppgave om å lage et program som leser inn en rekke bokstavkarakterer (A-F), og som skal skrive ut den beste og den dårligste. Problemet med det programmet jeg har laget er at bare den siste karakteren jeg leser inn "gjelder". Leser jeg inn A,B,E,C, får jeg at beste og dårligste karakter er C. Harholdt på i et par dager med dette, og begynner å bli lei. I tillegg har jeg mange andre oppgaver som skal leveres.. HELP!! //Program som leser inn karakterer A-F, og som skal skrive ut den beste og dårligste. import javax.swing.JOptionPane; public class test { public static void main(String[] args) { //Variabeldeklarasjon String karakter; String inputKarakter; String bestutStreng; String worstutStreng; //Initierer bestutStreng = "Du har ikke tastet inn karakter, eller tastet inn en ugyldig karakter"; worstutStreng = "Du har ikke tastet inn karakter, eller tastet inn en ugyldig karakter"; //Utfører "beregningene" karakter = JOptionPane.showInputDialog("Skriv inn karakter (A-F): (Stopp avslutter innlesning) "); inputKarakter = karakter.toUpperCase(); while (! inputKarakter.equals("STOPP")) { karakter = JOptionPane.showInputDialog("Skriv inn karakter (A-F): (Stopp avslutter innlesning) "); inputKarakter = karakter.toUpperCase(); if (inputKarakter.equals("A")) { bestutStreng = "Beste innleste karakter er A"; } else if (inputKarakter.equals("B")) { bestutStreng = "Beste innleste karakter er B"; } else if (inputKarakter.equals("C")) { bestutStreng = "Beste innleste karakter er C"; } else if (inputKarakter.equals("D")) { bestutStreng = "Beste innleste karakter er D"; } else if (inputKarakter.equals("E")) { bestutStreng = "Beste innleste karakter er E"; } else if (inputKarakter.equals("F")) { bestutStreng = "Beste innleste karakter er F"; } //endif if (inputKarakter.equals("F")) { worstutStreng= "Dårligste innleste karakter er F"; } else if (inputKarakter.equals("E")) { worstutStreng = "Dårligste innleste karakter er E"; } else if (inputKarakter.equals("D")) { worstutStreng = "Dårligste innleste karakter er D"; } else if (inputKarakter.equals("C")) { worstutStreng = "Dårligste innleste karakter er C"; } else if (inputKarakter.equals("B")) { worstutStreng = "Dårligste innleste karakter er B"; } else if (inputKarakter.equals("A")) { worstutStreng = "Dårligste innleste karakter er A"; } //endif }//endwhile //Skriver ut resultat JOptionPane.showMessageDialog(null, bestutStreng, "Beste karakter", JOptionPane.PLAIN_MESSAGE); JOptionPane.showMessageDialog(null, worstutStreng, "Dårligste karakter", JOptionPane.PLAIN_MESSAGE); }//endklasse }//endmain Lenke til kommentar
arnizzz Skrevet 20. september 2006 Del Skrevet 20. september 2006 Jeg ville laget et Array som tok i mot alle inputene. F.eks ved inkrementere en int for å bruke som indeks til arrayet for hver gjennomkjøring av loopen . break ut av loopen når du finner STOPP. Når man er ferdig med while/for løkken ville jeg loopet gjennom arrayet og sjekket om den inneholdt A i noen av dem, B i noen av dem osv i den rekkefølgen. Da kan du bare printe "array[indeks] er beste karakter" og så breake ut av loopen. Kan ikke komme med kodeeksempler da jeg ikke har lært meg java enda. Lenke til kommentar
anderskk Skrevet 20. september 2006 Forfatter Del Skrevet 20. september 2006 Jeg ville laget et Array som tok i mot alle inputene. F.eks ved inkrementere en int for å bruke som indeks til arrayet for hver gjennomkjøring av loopen . break ut av loopen når du finner STOPP. Når man er ferdig med while/for løkken ville jeg loopet gjennom arrayet og sjekket om den inneholdt A i noen av dem, B i noen av dem osv i den rekkefølgen. Da kan du bare printe "array[indeks] er beste karakter" og så breake ut av loopen. Kan ikke komme med kodeeksempler da jeg ikke har lært meg java enda. 6899521[/snapback] Hei! Takk for svar, men vi har ikke lært Array ennå, og her derfor ikke lov til å bruke det på denne øvinga... Lenke til kommentar
NikkaYoichi Skrevet 20. september 2006 Del Skrevet 20. september 2006 Nå er det en stund siden jeg dreiv med java, så syntaksen får du fikse opp i selv, men sånn kan du gjøre det. Gi hver karakter en verdi 1-6 som representerer bokstavkarakterene. if bestekarakter > innlest karakter then bestekarakter = innlestkarakter else bestekarakter = bestekarakter end if if darligstekarakter > innlestkarakter then darligstekarakter = darligstekarakter else darligstekarakter = innlestkarakter end if Nå vil variablene kun erstattes hvis den innleste karakteren er dårligere eller bedre. Lenke til kommentar
JohndoeMAKT Skrevet 20. september 2006 Del Skrevet 20. september 2006 Du trenger ikke gi de egne verdier da du bare kan caste de til "char" (ASCII-verdier) som kan direkte sammenlignes. Jeg tror noe i denne banen skal fungere : if ((char)innlestVerdi < bestekarakter) bestekarakter = (char)innlestVerdi; if ((char)innlestVerdi > lavestekarakter) lavestekarakter = (char)innlestVerdi; Lenke til kommentar
w3edr5t Skrevet 20. september 2006 Del Skrevet 20. september 2006 No slikt burde fungere: // Variabeldeklarasjon String karakter; String inputKarakter; String bestutStreng; String worstutStreng; char best = ' '; char worst = ' '; // Initierer bestutStreng = "Du har ikke tastet inn karakter, eller tastet inn en ugyldig karakter"; worstutStreng = "Du har ikke tastet inn karakter, eller tastet inn en ugyldig karakter"; // Utfører "beregningene" do { karakter = JOptionPane.showInputDialog("Skriv inn karakter (A-F): (Stopp avslutter innlesning) "); inputKarakter = karakter.toUpperCase(); if ("ABCDEF".indexOf(inputKarakter) > -1 && inputKarakter.length() == 1) { //Vi har en gyldig karakter! char inputKarakterChar = inputKarakter.toCharArray()[0]; if (best == ' ' || inputKarakterChar < best ) { best = inputKarakterChar; bestutStreng = "Beste innleste karakter er " + best; } if (worst == ' ' || inputKarakterChar > worst ) { worst = inputKarakterChar; worstutStreng = "Dårligste innleste karakter er " + worst; } } } while (!inputKarakter.equals("STOPP")); // Skriver ut resultat JOptionPane.showMessageDialog(null, bestutStreng, "Beste karakter", JOptionPane.PLAIN_MESSAGE); JOptionPane.showMessageDialog(null, worstutStreng, "Dårligste karakter", JOptionPane.PLAIN_MESSAGE); System.exit(0); Lenke til kommentar
anderskk Skrevet 20. september 2006 Forfatter Del Skrevet 20. september 2006 (endret) No slikt burde fungere: // Variabeldeklarasjon String karakter; String inputKarakter; String bestutStreng; String worstutStreng; char best = ' '; char worst = ' '; // Initierer bestutStreng = "Du har ikke tastet inn karakter, eller tastet inn en ugyldig karakter"; worstutStreng = "Du har ikke tastet inn karakter, eller tastet inn en ugyldig karakter"; // Utfører "beregningene" do { karakter = JOptionPane.showInputDialog("Skriv inn karakter (A-F): (Stopp avslutter innlesning) "); inputKarakter = karakter.toUpperCase(); if ("ABCDEF".indexOf(inputKarakter) > -1 && inputKarakter.length() == 1) { //Vi har en gyldig karakter! char inputKarakterChar = inputKarakter.toCharArray()[0]; if (best == ' ' || inputKarakterChar < best ) { best = inputKarakterChar; bestutStreng = "Beste innleste karakter er " + best; } if (worst == ' ' || inputKarakterChar > worst ) { worst = inputKarakterChar; worstutStreng = "Dårligste innleste karakter er " + worst; } } } while (!inputKarakter.equals("STOPP")); // Skriver ut resultat JOptionPane.showMessageDialog(null, bestutStreng, "Beste karakter", JOptionPane.PLAIN_MESSAGE); JOptionPane.showMessageDialog(null, worstutStreng, "Dårligste karakter", JOptionPane.PLAIN_MESSAGE); System.exit(0); 6899868[/snapback] Det fungerer det!! Muligens litt for avansert, men det får gå! Takker!! Men hvis noen har et annet forslag uten array er det bare å legge ut! Fikk høre at vi måtte løse den ved en masse if'er og else'er... Endret 20. september 2006 av anderskk Lenke til kommentar
JohndoeMAKT Skrevet 20. september 2006 Del Skrevet 20. september 2006 I stedet for å bruke chararray kan du ta en substring av stringen før du caster til char. Lenke til kommentar
anderskk Skrevet 20. september 2006 Forfatter Del Skrevet 20. september 2006 I stedet for å bruke chararray kan du ta en substring av stringen før du caster til char. 6900064[/snapback] Og det vil si? Er helt "dummie" jeg... Lenke til kommentar
w3edr5t Skrevet 20. september 2006 Del Skrevet 20. september 2006 Her er en halvferdig en public static void main(String[] args) { //Variabeldeklarasjon String karakter; String ik; String bestutStreng = "Du har ikke tastet inn karakter, eller tastet inn en ugyldig karakter"; String worstutStreng = "Du har ikke tastet inn karakter, eller tastet inn en ugyldig karakter"; String best = ""; String worst = ""; //Utfører "beregningene" do { karakter = JOptionPane.showInputDialog("Skriv inn karakter (A-F): (Stopp avslutter innlesning) "); ik = karakter.toUpperCase(); //Bare tillatt med karakterer A-F if (ik.equals("A") ||ik.equals("B") || ik.equals("C") || ik.equals("D") ||ik.equals("E") || ik.equals("F")) { //Vi har en gyldig karakter //Sjekke om dette er den beste karakteren. if (ik.equals("A")) { best = "A"; } else if (ik.equals("B") && !best.equals("A")) { best = "B"; } else if (ik.equals("C") && !best.equals("A") && !best.equals("B")) { best = "C"; } else if (ik.equals("D") && !best.equals("A") && !best.equals("B") && !best.equals("C")) { best = "D"; } else if (ik.equals("E") && !best.equals("A") && !best.equals("B") && !best.equals("C") && !best.equals("D")) { best = "E"; } else if (ik.equals("E") && !best.equals("A") && !best.equals("B") && !best.equals("C") && !best.equals("D") && !best.equals("E")) { best = "F"; } } } while (!ik.equals("STOPP")); if (!best.equals("")) { bestutStreng = "Beste innleste karakter er " + best; } if (!worst.equals("")) { worstutStreng = "Dårligste innleste karakter er " + best; } //Skriver ut resultat JOptionPane.showMessageDialog(null, bestutStreng, "Beste karakter", JOptionPane.PLAIN_MESSAGE); JOptionPane.showMessageDialog(null, worstutStreng, "Dårligste karakter", JOptionPane.PLAIN_MESSAGE); System.exit(0); Klarer du resten Lenke til kommentar
JohndoeMAKT Skrevet 20. september 2006 Del Skrevet 20. september 2006 I stedet for å bruke chararray kan du ta en substring av stringen før du caster til char. 6900064[/snapback] Og det vil si? Er helt "dummie" jeg... 6900120[/snapback] w3edr5t sitt siste eksempel er nok mer i rett vanskelighetsklasse så se på det du.. selv om det er litt redundancy der. Det er ikke nødvendig å først teste om den er ABCDEF og så teste hvilken av de den er. test heller : If A do A else if B do B else if C do C else if STOP do stop (break;) else ugylidig_tegn Lenke til kommentar
anderskk Skrevet 20. september 2006 Forfatter Del Skrevet 20. september 2006 Her er en halvferdig en public static void main(String[] args) { //Variabeldeklarasjon String karakter; String ik; String bestutStreng = "Du har ikke tastet inn karakter, eller tastet inn en ugyldig karakter"; String worstutStreng = "Du har ikke tastet inn karakter, eller tastet inn en ugyldig karakter"; String best = ""; String worst = ""; //Utfører "beregningene" do { karakter = JOptionPane.showInputDialog("Skriv inn karakter (A-F): (Stopp avslutter innlesning) "); ik = karakter.toUpperCase(); //Bare tillatt med karakterer A-F if (ik.equals("A") ||ik.equals("B") || ik.equals("C") || ik.equals("D") ||ik.equals("E") || ik.equals("F")) { //Vi har en gyldig karakter //Sjekke om dette er den beste karakteren. if (ik.equals("A")) { best = "A"; } else if (ik.equals("B") && !best.equals("A")) { best = "B"; } else if (ik.equals("C") && !best.equals("A") && !best.equals("B")) { best = "C"; } else if (ik.equals("D") && !best.equals("A") && !best.equals("B") && !best.equals("C")) { best = "D"; } else if (ik.equals("E") && !best.equals("A") && !best.equals("B") && !best.equals("C") && !best.equals("D")) { best = "E"; } else if (ik.equals("E") && !best.equals("A") && !best.equals("B") && !best.equals("C") && !best.equals("D") && !best.equals("E")) { best = "F"; } } } while (!ik.equals("STOPP")); if (!best.equals("")) { bestutStreng = "Beste innleste karakter er " + best; } if (!worst.equals("")) { worstutStreng = "Dårligste innleste karakter er " + best; } //Skriver ut resultat JOptionPane.showMessageDialog(null, bestutStreng, "Beste karakter", JOptionPane.PLAIN_MESSAGE); JOptionPane.showMessageDialog(null, worstutStreng, "Dårligste karakter", JOptionPane.PLAIN_MESSAGE); System.exit(0); Klarer du resten 6900901[/snapback] Da kunne selv en dummie løse den!! Tusen hjertelig!! 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å