Avatar billede shako Novice
02. oktober 2012 - 21:07 Der er 11 kommentarer og
1 løsning

java.util.InputMismatchException

Jeg har en opgave hvor jeg skal læse en .txt fil formateret som

String,int,int,int,int
String,int,int,int,int

etc... Jeg har brugt , som Delimiter scan.useDelimiter(",");

Mit scannings loop ser sådan her ud:

while(scan.hasNextLine())
{
    String Name = scan.next();
    int Val1 = scan.nextInt();
    int Val2 = scan.nextInt();
    int Val3 = scan.nextInt();
    int Val4 = scan.nextInt();
    Person person = new Person();
    person.loadInfo(Name, Val1, Val2, Val3, Val4);
    }
    scan.close();


Men hver gang jeg kører det får jeg error:

Error: Line 34 [[ int Val4 = scan.nextInt();
Exception in thread "main" java.util.InputMismatchException
Avatar billede shako Novice
02. oktober 2012 - 21:08 #1
loadInfo er selvfølgelig en funktion som tager String, int, int, int , int.
Avatar billede arne_v Ekspert
02. oktober 2012 - 22:12 #2
Proev og kige paa dette eksempel:

import java.io.StringReader;
import java.util.Scanner;

public class ScanFun {
    public static void main(String[] args) {
        String s = "A,1,2,3,4\nBB,5,6,7,8";
        Scanner scn = new Scanner(new StringReader(s));
        scn.useDelimiter("[,\n]");
        while(scn.hasNext()) {
            System.out.println(scn.next());
            System.out.println(scn.nextInt());
            System.out.println(scn.nextInt());
            System.out.println(scn.nextInt());
            System.out.println(scn.nextInt());
        }
    }
}
Avatar billede arne_v Ekspert
02. oktober 2012 - 22:12 #3
Hvorfor bruger du loadinfo og ikke argumenter til constructor?
Avatar billede shako Novice
03. oktober 2012 - 11:57 #4
Det er et godt spørgsmål, har smidt argumenter i min constructor istedet.

StringReader'en kan så vidt jeg ved ikke bruges til at læse .txt filer
Avatar billede arne_v Ekspert
03. oktober 2012 - 14:19 #5
Nej - til en fil bruger man FileReader.

:-)

Mne pointen er mest min useDelimiter !
Avatar billede shako Novice
03. oktober 2012 - 14:25 #6
Jeg har prøvet at ændre useDelimiter så den også bruger newline som delimiter, men jeg får stadig samme fejl.

Til gengæld får jeg ingen fejl hvis jeg bare tager alle variablende som Strings, men jeg vil jo helst ha første variable som string, og resten som ints.
Avatar billede shako Novice
03. oktober 2012 - 14:29 #7
Tror bare jeg poster min kode:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Scanner;

public class Loader {
Scanner scan;
File file;
ArrayList<Person> PersonList;
FileWriter output;

public void LoadPersons() throws FileNotFoundException {
PersonList = new ArrayList<>();
file = new File("person.txt");
scan = new Scanner(file);
scan.useDelimiter("[,\n]");

if (PersonList.isEmpty() == false) {
    PersonList.clear(); }

while(scan.hasNextLine()) {
    String Name = scan.next();
    int Adm = scan.nextInt();
    int Ana = scan.nextInt();
    int Krea = scan.nextInt();
    int Afs = scan.nextInt();
    Person person = new Person(Name, Adm, Ana, Krea, Afs);
    PersonList.add(person);
    }
    scan.close(); } 
}
Avatar billede shako Novice
03. oktober 2012 - 14:31 #8
Som test program kørte jeg følgene (bare for at se om det virkede:

import java.io.FileNotFoundException;

public class Test {
    public static void main(String[] args) throws FileNotFoundException {
        Loader load = new Loader();
        load.LoadPersons(); }
}

filen person.txt er som sagt

Name,Adm,Ana,Krea,Afs
Name,Adm,Ana,Krea,Afs

hvor Adm, Ana, Krea og Afs er int og Name er String
Avatar billede arne_v Ekspert
03. oktober 2012 - 14:43 #9
ah - Windows line delimiter !

scan.useDelimiter(",|(\r\n)")
Avatar billede arne_v Ekspert
03. oktober 2012 - 14:44 #10
eller bedre:

scan.useDelimiter(",|(" + System.getProperty("line.separator")+ ")");
Avatar billede shako Novice
03. oktober 2012 - 14:57 #11
Ja den virker nu, post et svar når du vil ha dine point :)
Avatar billede arne_v Ekspert
03. oktober 2012 - 15:05 #12
svar
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