13375k1133z Skrevet 25. september 2010 Del Skrevet 25. september 2010 Jeg har litt problem med følgende kode: import java.util.Scanner; public class soppsaus { public static void main(String[] args) { Scanner tastatur = new Scanner(System.in); System.out.println("Skriv en statusstreng per linje.\nInnlesing avsluttes med tom linje.\n"); /*String bestått ="Godkjent"; String iB ="ikke godkjent"; String iV ="ikke levert"; */ int[] charCount = new int[3]; while (true) { System.out.print ("Angi statusstreng (+, -, x):"); //statusstreng String test = tastatur.nextLine(); if(test.length()==0) break; for (int i = 0; i < test.length(); i++) { if (test.charAt(i) == 'x') {charCount [0] ++; } //ikke levert if (test.charAt(i) == '-') {charCount [1] ++; } // ikke godkjent if (test.charAt(i) == '+') {charCount [2] ++; } //godkjent } } for(int i = 0; i < charCount.length; i++) { if (charCount[i] == 0) continue; System.out.println("Ikke levert: " + charCount[0] ); System.out.println("Ikke godkjent: " + charCount [1] ); System.out.println("Godkjent: " + charCount [2] ); } /* public static boolean godkjent(String input){ if (input.equals???? return System.out.println("Statusstreng" + + "inneholder en ugyldig verdi og vil bli ignorert"); returnfalse;*/ }} Denne koden leser inn antall ganger en har tastet x,- og +. Trykker du enter etter du har skrevet inn en verdi i strenger, kommer en ny streng, slik at du fortsatt kan skrive verdi, beregningene blir postet i output når du ikke taster en verdi i streng en gang, litt lettere å forstå når jeg viser hvordan en kjøring skal være: String: ++x- String: -- String: xx String: (enter) x: 3 -: 3 +: 2 Problemet i koden jeg har skrevet, er at resultatet blir skrevet ut to ganger! Hva er årsaken til dette? Sørsmål 2: Som dere ser har jeg skrevet inn en metode helt på slutten, eller iallefall prøvd å skrive. Jeg stoppet imidlertid litt opp da jeg fant ut at jeg hadde generelt lite peiling om hvordan jeg skulle skrive denne koden (første gang jeg gjør dette). Håper derfor det er mulig å få litt hjelp av dere det jeg ønsker denne metoden skal gjøre er at dersom den som bruker programmet skriver inn en ugyldig verdi, blir denne strengen ignorert . Eksempel på kjøring: Streng: xx-xx Streng: --x- Streng: -T--- Statusstreng -----T--- inneholder en ugyldig verdi og vil bli ignorert. Streng: --++ Streng: + Streng: x:5 -: 9 +: 3 Hvordan kan jeg gjøre dette? Takker på forhånd for hjelp! Lenke til kommentar
Psy Skrevet 25. september 2010 Del Skrevet 25. september 2010 for(int i = 0; i < charCount.length; i++) { if (charCount[i] == 0) continue; System.out.println("Ikke levert: " + charCount[0] ); System.out.println("Ikke godkjent: " + charCount [1] ); System.out.println("Godkjent: " + charCount [2] ); } Det du egentlig prøver å gjøre her er: if( charCount[0] > 0 ) System.out.println("Ikke levert: "+ charCount[0]); if( charCount[1] > 0 ) System.out.println(...; ... Om du flytter resultatet ut av løkken vil det ikke komme ut flere ganger. For spørsmål to må du i den nye metoden din gå igjennom hele strengen slik du har gjort tidligere, men istedenfor if statements kan du bruke f.eks char c = test.charAt(i); switch(c) { case 'x': case '-': case '+': continue; default: // Strengen inneholder en ugyldig verdi return false; } Dette betyr kort fortalt at om tegnet er, 'x', '-' eller '+' så hopper den til neste iterasjon i løkken. Er den noe som helst annet vil den kjøre innholdet i default: blokken. Lenke til kommentar
13375k1133z Skrevet 27. september 2010 Forfatter Del Skrevet 27. september 2010 Takker. Fikk til dette til slutt. Ellers har jeg litt problem med følgende kode: import java.util.Scanner; public class oppgave1{ public static void main (String[]args) { Scanner tastatur = new Scanner(System.in); System.out.print ("Angi antall kolonner:"); int kolonne= tastatur.nextInt(); //leser inn intastet data System.out.print ("Angi antall rader:"); int rad = tastatur.nextInt(); { if (kolonne == 0 || rad == 0) System.out.println("Du har tastet en ugyldig verdi, prøv igjen."); } for ( int i = 0; i < kolonne; i++) { //kolonne System.out.println(); for (int j = 0; j < rad; j++) { //rad System.out.print ("(i = "+ i +" , j = "+ j +")" ); //resltat } } } } når noen skriver inn en ugyldig verdi, skal det komme en feilmelding. en ugyldig verdi er her 0. Taster noen 0, skal programmet ikke kjøre og lage en feilmelding. Skriver jeg inn 12 og 0 no, kommer feilmeldingen og ingen rader blir skrevet, men programmet kjører. Hvordan kan jeg skrive om denne setningen { if (kolonne == 0 || rad == 0) System.out.println("Du har tastet en ugyldig verdi, prøv igjen."); } slik at dersom noen taster f.eks 12 og 0, kommer bare feilmeldingen og programmet stopper? Er litt kjent med i c kan jeg bruke break, hva kan jeg bruke i java? Lenke til kommentar
Sokkalf™ Skrevet 27. september 2010 Del Skrevet 27. september 2010 (endret) Du kan bruke System.exit() for å avslutte programmet. Edit: { if (kolonne == 0 || rad == 0) System.out.println("Du har tastet en ugyldig verdi, prøv igjen."); } Hvorfor setter du if-setningen inn i en blokk (med {})? Endret 27. september 2010 av Sokkalf™ Lenke til kommentar
Zash Skrevet 27. september 2010 Del Skrevet 27. september 2010 Du kan ikke poste hvordan du løste det? Holder på å lære meg java 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å