java.util.NoSuchElementException: строки не найдено


Answers

Вы вызываете nextLine() и это бросает исключение, когда нет строки, точно так, как описывает javadoc. Он никогда не вернет null

http://download.oracle.com/javase/1,5.0/docs/api/java/util/Scanner.html

Question

У меня есть исключение времени выполнения в моей программе, пока я читаю файл через сканер.

java.util.NoSuchElementException: No line found     
   at java.util.Scanner.nextLine(Unknown Source)    
   at Day1.ReadFile.read(ReadFile.java:49)  
   at Day1.ParseTree.main(ParseTree.java:17) 

Мой код:

while((str=sc.nextLine())!=null){
    i=0;
    if(str.equals("Locations"))
    {
        size=4;
        t=3;
        str=sc.nextLine();
        str=sc.nextLine();
    }
    if(str.equals("Professions"))
    {
        size=3;
        t=2;
        str=sc.nextLine();
        str=sc.nextLine();
    }
    if(str.equals("Individuals"))
    {
        size=4;
        t=4;
        str=sc.nextLine();
        str=sc.nextLine();
    }

int j=0;
String loc[]=new String[size];
while(j<size){
    beg=0;
    end=str.indexOf(',');
    if(end!=-1){
        tmp=str.substring(beg, end);
        beg=end+2;
    }
    if(end==-1)
    {
        tmp=str.substring(beg);
    }
    if(beg<str.length())
        str=str.substring(beg);
    loc[i]=tmp;
    i++;

    if(i==size ){
        if(t==3)
        {
            location.add(loc);
        }
        if(t==2)
        {
            profession.add(loc);
        }
        if(t==4)
        {
            individual.add(loc);
        }
        i=0;
    }
    j++;
    System.out.print("\n");
}



Ваша реальная проблема в том, что вы вызываете «sc.nextLine ()» больше раз, чем количество строк.

Например, если у вас есть только 10 строк ввода, вы можете вызвать «sc.nextLine ()» только 10 раз.

Каждый раз, когда вы вызываете «sc.nextLine ()», будет использоваться одна входная строка. Если вы назовете «sc.nextLine ()» больше времени, чем количество строк, вы получите исключение «java.util.NoSuchElementException: строка не найдена».

Если вам нужно называть «sc.nextLine ()» n раз, то у вас должно быть не менее n строк.

Попытайтесь изменить свой код в соответствии с количеством раз, когда вы вызываете «sc.nextLine ()» с количеством строк, и я гарантирую, что ваша проблема будет решена.






Links