30. oktober 2007 - 16:16Der er
4 kommentarer og 1 løsning
Brug af nextLine()
Jeg er i gang med at lave et program så jeg gemmer nogle data. Jeg har dog nogle problemer når jeg bruger funktionen nextLine() i Scanner-klassen. Problemet er så simpelt at den springer linjen over hvor at den egentlig burde gemme den næste indtastet linje i variablen "adresser".
Er der nogen der kan forklare hvorfor dette sker??? og evt. afhjælpe det...
import java.util.Scanner;
public class MethodeArray { private Scanner scan = new Scanner(System.in); private boolean slutter = false; private String fornavn, efternavn, adresser,by, land; private int postnummer; private long mobiltelf; public MethodeArray(){
}
public void skrivNOget(){ do { System.out.println("Du skal nu skrive navn:"); System.out.println("Du har indtast navne og adresser.\n Tryk 0 når du er færdig"); if (scan.hasNextInt()) { if (scan.nextInt()==0) slutter = true; else System.out.println("Du har skrevet forkert..."); } else { fornavn = scan.next(); efternavn = scan.next();
//Det er denne linje som bliver sprunget over... System.out.println("Skriv din adresse"); adresser = scan.nextLine();
System.out.println("Skriv dit postnummer og by"); postnummer = scan.nextInt(); by = scan.next();
System.out.println("Skriv dit land"); land = scan.next(); System.out.println("Skriv dit tlfnummer"); mobiltelf = scan.nextLong(); } }while(slutter != true); } public void udskrivTing(){ String result = fornavn + "\t" + efternavn + "\n" + adresser +"\n" + postnummer + " "+ by +"\n" + land; result = result + "\n"+mobiltelf; System.out.println(result); } }
Jeg synes det er noget værre rod.. Kan ikke rigtigt finde ud af hvor du vil hen af. Hold dig bare til scan.nextInt() og scan.next() og scan.nextLine hvis du både vil skrive fornavn og efternavn efter hinanden uden at trykke enter.
Jeg besidder desværre ikke evnerne til at se "rodet", men hvis jeg læser doc rigtigt, så flytter next() cursor til næste linie og nextline() flytter til enden af linien og returnerer resten med undtagelse af linieskift. Når nextline() følger efter next(), returnerer nextline() ingenting, (da den flytter til næste linie og dermed kun læser et linieskift - som den pr. default ikke returnerer), så løsningen i din situation er enten konsekvent at bruge next() eller nextline() - se nedenstående eksempel
public class TestScanner { public static void main(String[] args) { String test = "Dette\ner\nen\ntest"; Scanner scan = new Scanner(test);
System.out.println("Bruger kun next()"); System.out.println(scan.next()); System.out.println(scan.next()); System.out.println(scan.next()); System.out.println(scan.next());
System.out.println("\nBruger nextline() ved 2nd iteration"); scan = new Scanner(test); System.out.println(scan.next()); System.out.println(scan.nextLine()); System.out.println(scan.next()); System.out.println(scan.next()); System.out.println(scan.next());
System.out.println("\nBruger kun nextline()"); scan = new Scanner(test); System.out.println(scan.nextLine()); System.out.println(scan.nextLine()); System.out.println(scan.nextLine()); System.out.println(scan.nextLine()); } }
Ahh mange tak for hjælpen... der gik lige så stille et lys op for mig, ved hjælp af dit eksempel. Dette betyder så at den for at hele adressen bliver scannet korrekt som skal der stå følgende kode:
fornavn = scan.next(); efternavn = scan.next(); scan.nextLine(); //Det er denne linje som bliver sprunget over... System.out.println("Skriv din adresse"); adresser = scan.nextLine();
Ovenstående virker, så smid et svar og få nogle point...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.