Emsal Skrevet 21. august 2013 Del Skrevet 21. august 2013 package trying.out.something; import java.util.Scanner; public class bibliotek { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String ans = ""; boolean exit = false; System.out.println("Skriv antall uker siden sist du har lånt boken:"); do { String text = sc.nextLine(); if (text.matches("[0-4]")) System.out.println("Du kan låne den litt til"); exit = true; // Går bare ann å skrive fra 0 til 9 else System.out.println("Skriv om på nytt"); if (text.matches("[5-9]")) System.out.println("Du kan ikke låne den lenger"); } while (!exit); } } Hvorfor kan jeg ikke ha en else setning der. Vil ha det sånn at hvis de skriver noe annet en de tallene 0-4 eller 5-9 så skal programmet spør igjen eller som det står der, skrive om på nytt. Lenke til kommentar
Hårek Skrevet 21. august 2013 Del Skrevet 21. august 2013 Fordi "if" blokken din er kun en linje, det er ingen parantes. Dermed er ikke "exit = true;" inne i "if" blokken, og "else" er helt malplassert. Man bør alltid bruke paranteser, også når blokken er kun en linje. 1 Lenke til kommentar
Lycantrophe Skrevet 21. august 2013 Del Skrevet 21. august 2013 Man bør alltid bruke paranteser, også når blokken er kun en linje. Nei. 2 Lenke til kommentar
Hårek Skrevet 21. august 2013 Del Skrevet 21. august 2013 Det vil jo alltid være uenighet om slikt. Kan være like ille å diskutere som religion. Her er fra en tilfeldig valgt 'code conventions' http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html Braces are used around all statements, even single statements, when they are part of a control structure, such as an if-else or for statement. This makes it easier to add statements without accidentally introducing bugs due to forgetting to add braces. 3 Lenke til kommentar
Emsal Skrevet 21. august 2013 Forfatter Del Skrevet 21. august 2013 (endret) Greit jeg bytta litt på det, men kom med et annet problem nå. Vil at alle karakterer og ord skal komme under (text.matches("")) får bare til en og en bokstav. Og hvis det går ann å ha tall fra 4 til uendelig eller høyere enn 4-9 hvert fall. System.out.println("Skriv antall uker siden sist du har lånt boken \nskriv \"exit\" for å gå ut:"); do { String text = sc.nextLine(); if (text.matches("")) System.out.println("skriv på nytt"); // få all text til å gå her som er skrevet if (text.matches("[0-3]")) System.out.println("Du kan låne den litt til"); // Går bare ann å skrive fra 0 til 9 if (text.matches("[4-9]")) System.out.println("Du må levere den tilbake!"); else if (text.matches("exit")) exit = true; } while (!exit); Endret 21. august 2013 av Emsal Lenke til kommentar
quantum Skrevet 21. august 2013 Del Skrevet 21. august 2013 Nei. Jo, fordi det alltid kommer en gjøk - f.eks. meg - og skal utvide one-lineren inni if-blokken på et senere tidspunkt, og glemmer å sette på bartene. Slurv, ja, men uunngåelig. Bedre å få dem på plass med en gang. Satt faktisk på jobbintervju en gang og ba om å få se koden til systemet jeg skulle begynne å jobbe med. Det første som dukka opp på skjermen var nettopp en sånn blemme... (Tok jobben likevel, noe som ikke viste seg å være helt lurt, så det var forsåvidt nyttig at bartene var droppa der, bare jeg hadde tatt hintet også ...) Lenke til kommentar
quantum Skrevet 21. august 2013 Del Skrevet 21. august 2013 (endret) Greit jeg bytta litt på det, men kom med et annet problem nå. Vil at alle karakterer og ord skal komme under (text.matches("")) får bare til en og en bokstav. Og hvis det går ann å ha tall fra 4 til uendelig eller høyere enn 4-9 hvert fall. Det er jo egentlig tall du jobber med her, så du bør kanskje ta konsekvensen av det og droppe regex til fordel for Integer.parseInt(...); public static void main(String[] args) { System.out.println("Skriv antall uker siden sist du har lånt boken \nskriv \"exit\" for å gå ut:"); Scanner sc = new Scanner(System.in); Boolean exit = false; do { String input = sc.nextLine(); if ("exit".equals(input)) { exit = true; } else // ingen bart ... fysj! try { Integer uker = Integer.parseInt(input); if (uker < 0) { throw new NumberFormatException("negativ verdi"); } if (uker < 4) { System.out.println("Du kan låne den litt til"); } else { System.out.println("Du må levere tilbake nuh!"); } } catch (NumberFormatException nfe) { System.err.println("Prøv igjen (" + nfe.getMessage() + ")"); } } while (!exit); } Endret 21. august 2013 av quantum Lenke til kommentar
Lycantrophe Skrevet 22. august 2013 Del Skrevet 22. august 2013 Jo, fordi det alltid kommer en gjøkDet gjør også mye kode mye mer klumpete. Om man er typen til det er det mange verktøy for å håndtere sånt og. Jeg har aldri opplevd en sånn feil. ja, men uunngåelig. Bedre å få dem på plass med en gang.Nei. Lenke til kommentar
GeirGrusom Skrevet 22. august 2013 Del Skrevet 22. august 2013 (endret) Hadde TS brukt linjeskift riktig så hadde det vært åpenbart med én gang. Endret 22. august 2013 av GeirGrusom Lenke til kommentar
quantum Skrevet 22. august 2013 Del Skrevet 22. august 2013 Det gjør også mye kode mye mer klumpete. Om man er typen til det er det mange verktøy for å håndtere sånt og. Jeg har aldri opplevd en sånn feil. men det vil du ... Lenke til kommentar
Lycantrophe Skrevet 22. august 2013 Del Skrevet 22. august 2013 men det vil du ... Neppe. Besides, editorer og indentering har løst dette lenge. Det er ofte mer støy med brackets enn uten. Lenke til kommentar
quantum Skrevet 22. august 2013 Del Skrevet 22. august 2013 (endret) Det er ofte mer støy med brackets enn uten. mer støy, færre bugs. sånn er det bare... Endret 22. august 2013 av quantum Lenke til kommentar
GeirGrusom Skrevet 22. august 2013 Del Skrevet 22. august 2013 (endret) if(text.matches("[0-4]")) System.out.println("Du kan låne den litt til"); exit = true; // Går bare ann å skrive fra 0 til 9 else System.out.println("Skriv om på nytt"); Hvis man bare formaterer på en fornuftig måte så er feilen helt åpenbar. Det er ikke brackets som er problemet. Eller jo, det skulle vært brackets der, men jeg har null imot if-er uten brackets. Hvis man kan unngå dem så er jeg helt for. I dette: int Foo(int bar) int value; if(bar == 100) { // en million tusen hundre linjer med kode value = Tannhjul } else { value = Spindelvev; } return value; } foretrekker jeg int Foo(int bar) { if(bar != 100) return Spindelvev; // en million tusen hundre linjer med kode! return Tannhjul; } Endret 22. august 2013 av GeirGrusom Lenke til kommentar
Lycantrophe Skrevet 22. august 2013 Del Skrevet 22. august 2013 ^ enig. That being said bruker jeg nesten aldri ifs. Og de er sjelden veldig lange. Og de gangene jeg bruker de er det stort sett preconditions + early returns i toppen av funksjonen. Lenke til kommentar
Emsal Skrevet 22. august 2013 Forfatter Del Skrevet 22. august 2013 Jeg går første året dataing. så beklager hvis jeg ikke helt skjønner hva dere skriver, men skal lese igjennom det noen ganger for å se om jeg får noe ut av det. Lenke til kommentar
Emsal Skrevet 22. august 2013 Forfatter Del Skrevet 22. august 2013 går det ann å få denne til å ikke telle med tallet 4 på en måte? if (uker < 4) { System.out.println("Du kan låne den litt til"); Lenke til kommentar
Emsal Skrevet 22. august 2013 Forfatter Del Skrevet 22. august 2013 (endret) nvm fant ut av det EDIT: Tusen takk for hjelpa folkens! Lært masse i dag ^^ if (uker == 4) { System.out.println("Lever den i dag"); } if (uker < 4) { System.out.println("Du kan låne den litt til"); } else if (uker > 4) { System.out.println("Du må levere den tilbake!"); Endret 22. august 2013 av Emsal Lenke til kommentar
Lycantrophe Skrevet 22. august 2013 Del Skrevet 22. august 2013 if( < 4 ) {} else if( > 4) {} else // == 4 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å