Прошу прощения, если это слишком просто, но я изучаю 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)
«Я всегда получаю сообщение об ошибке» «Какая ошибка? Кроме того, соблюдайте соглашения об именах в соответствии со значением, означающим начало всех ваших переменных с буквой в нижнем регистре. – csmckelvey
Проблема в том, что даже после чтения -1 вы все равно пытаетесь прочитать остальные переменные (которых там нет). Вам нужно выйти из цикла, например, с помощью 'return', вместо продолжения. Кроме того, вы должны использовать блок 'try' или' try'-with-resources, чтобы закрыть сканер, а не пропустить его, если будет создано исключение. Наконец, научитесь использовать отладчик; прохождение через петлю показало бы вам проблему в действии. – chrylis