Avatar billede jonesw Nybegynder
30. oktober 2007 - 16:16 Der 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);
    }
}
Avatar billede alex13 Nybegynder
30. oktober 2007 - 18:15 #1
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.
Avatar billede _carsten Nybegynder
30. oktober 2007 - 20:08 #2
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());
    }
}
Avatar billede jonesw Nybegynder
31. oktober 2007 - 14:59 #3
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...
Avatar billede _carsten Nybegynder
31. oktober 2007 - 17:29 #4
Kommer her
Avatar billede alex13 Nybegynder
01. november 2007 - 16:49 #5
Fantastisk
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester