2014-08-30 2 views
-2

Прошу прощения, если это слишком просто, но я изучаю Java на данный момент и застрял. В настоящее время я занимаюсь онлайн-обучением и встал на вопрос, связанный с анализом данных. Я создал файл с этой части кода:Проблемы с чтением данных из файла в java

import java.util.Scanner; 
import java.io.*; 
class PrintnumbertoFile 
{ 
public static void main (String[] args) throws IOException 
{ 
    Scanner scan = new Scanner(System.in); 
    int age=0, IQ, Gender, height; 
    File file = new File("data.txt"); 
    PrintStream print = new PrintStream(file); 
    while (age !=-1) 
    { 
     System.out.print("Age(-1 to exit): "); 
     age= scan.nextInt(); 
     print.println(age); 
     System.out.print("IQ: "); 
     IQ= scan.nextInt(); 
     print.println(IQ); 
     System.out.print("Gender(1 for male, 0 for female): "); 
     Gender= scan.nextInt(); 
     print.println(Gender); 
     System.out.print("Height (Inches): "); 
     height= scan.nextInt(); 
     print.println(height); 
     } 
    print.close(); 
    } 
} 

Вот данные, которые получили вошли:

17 
120 
1 
71 
20 
183 
0 
63 
15 
100 
1 
61 
31 
165 
0 
73 
20 
190 
1 
62 
50 
167 
0 
59 
36 
295 
0 
79 
76 
173 
1 
58 
12 
97 
1 
48 
27 
115 
0 
72 
-1 

Хотя, данные сама не закрывается после ввода -1 печально. Но это не проблема. Проблема заключается в том, что, когда я читаю данные с этим кодом:

import java.util.Scanner; 
import java.io.*; 
class getnumbersfromFile 
{ 
public static void main (String[] args) throws IOException 
{ 
    File file = new File("data.txt"); 
    Scanner scan = new Scanner(file); 
    int age=0, IQ, Gender, height, AmountOfPeople = 0; 
    while (age != -1) 
    { 
     System.out.print("Age(-1 to exit): "); 
     age= scan.nextInt(); 
     System.out.println(age); 
     System.out.print("IQ: "); 
     IQ= scan.nextInt(); 
     System.out.println(IQ); 
     System.out.print("Gender(1 for male, 0 for female): "); 
     Gender= scan.nextInt(); 
     System.out.println(Gender); 
     AmountOfPeople++; 
     System.out.print("Height (Inches): "); 
     height= scan.nextInt(); 
     System.out.println(height); 
     } 
    scan.close(); 
    System.out.println("Number of people in the file: " +AmountOfPeople); 
    } 
} 

Я всегда получаю ошибку в конце, потому что он не останавливается после прочтения -1. Я также попытался поставить:

while (scan.hasNextInt()) 

, но это ничего не значит. Я снова прошу прощения, если это кажется действительно глупым, но я в основном следую руководству, которое учитель дал мне, и это не помогает. Я также не могу попросить учителя помочь, потому что он не работает летом. Любая помощь будет оценена!

P.S. Если кто-то знает, как получить самого старого и молодого человека из файла, то это тоже будет полезно!

EDIT: Ой, извините за это. Я забыл добавить код ошибки. Это то, что я получаю:

Exception in thread "main" java.util.NoSuchElementException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at getnumbersfromFile.main(getnumbersfromFile.java:17) 
+1

«Я всегда получаю сообщение об ошибке» «Какая ошибка? Кроме того, соблюдайте соглашения об именах в соответствии со значением, означающим начало всех ваших переменных с буквой в нижнем регистре. – csmckelvey

+1

Проблема в том, что даже после чтения -1 вы все равно пытаетесь прочитать остальные переменные (которых там нет). Вам нужно выйти из цикла, например, с помощью 'return', вместо продолжения. Кроме того, вы должны использовать блок 'try' или' try'-with-resources, чтобы закрыть сканер, а не пропустить его, если будет создано исключение. Наконец, научитесь использовать отладчик; прохождение через петлю показало бы вам проблему в действии. – chrylis

ответ

0
age= scan.nextInt(); 
if(age==-1){ 
    break; 
} 

+1 для обучения использовать затмение отладчик.

Смежные вопросы