2010-06-03 2 views
0

У меня проблема с чтением ввода, может ли кто-нибудь мне помочь.Чтение входов в Java - help

Каждая строка ввода имеет следующие значения: X e Y, разделенные пробелом.

12 1  
12 3 
23 4 
9 3 

Я использую этот код в java, но не работает, его единственное чтение первой строки может мне помочь?

String []f; 
    String line; 
    Scanner in=new Scanner(System.in); 

    while((line=in.nextLine())!=null){ 
     f=line.split(" "); 

     int X,Y; 
     X=Integer.parseInt(f[0]); 
     Y=Integer.parseInt(f[1]); 

     if(X<=40 && Y<=40) 
      metohod(X,Y); 


     line=in.nextLine(); 

    } 
} 
+2

По мере приобретения и улучшения навыков Java вы должны взглянуть на соглашения об именах Java. Здесь: имена полей, членов, переменных всегда должны начинаться с буквы в нижнем регистре, заглавные имена представляют классы (типы). –

+1

'Scanner'! =' BufferedReader'. 'Scanner.nextLine()' никогда не возвращает 'null'. вместо этого используйте 'hasNextLine()'. – polygenelubricants

ответ

0

Вы слишком часто вызываете один line=in.nextLine(), но почему бы не использовать in.nextInt()? Следующие должны работать expectd:

Scanner in = new Scanner(System.in); 

while(in.hasNextLine()) { 
    int x = in.nextInt(); 
    int y = in.nextInt(); 

    if(x <= 40 && y <= 40) 
     method(x, y); 
} 

(код проверяется, и он читает больше, чем просто в первой строке Ваша предыдущая проблема может быть может быть формат новой строки входного файла.).

Посмотрите на scanner API docs.


Для отладки это можно использовать Scanner(File file) конструктор вместо этого.

+0

Я также пытался использовать этот код, и он также дал мне результат для первой строки ввода. Я не знаю, что не так :( – Peiska

+0

Я подозреваю, что это связано с тем, как вы кормите вход в программу. Попробуйте создать экземпляр сканера с помощью 'in = new Scanner (новый файл (« yourfile.txt »)); вместо этого (для отладки). – aioobe

1

Вы вызываете nextLine дважды, один раз в то время, другой linha = xxx; Что такое linha в любом случае? Попробуйте

BufferedReader reader = new BufferedReader(...); 
while((line = reader.readLine())!=null) { 
    String[] f = line.split(" "); 
    int X,Y; 
    X=Integer.parseInt(f[0]); 
    Y=Integer.parseInt(f[1]); 
} 
+0

, даже с этим кодом он читает только первую строку. – Peiska

+0

, пожалуйста, добавьте в линию линию печати. Возможно, вы используете файл unix (с \ n в конце) и читаете его в Windows (ожидая \ r \ n). – krico

0
line=in.nextLine(); 

Вы читаете следующую строку и ничего не делать с ним. Если вы удалите это, он должен работать.

+0

Простите, это была ошибка, когда я менял код, чтобы вы лучше поняли, я уже его изменил. – Peiska

+0

Да, я так и думал :). В любом случае, если вы удалите эту строку, вы должны быть в порядке. – npinti

0

Поскольку вы используете Scanner, почему бы вам просто не использовать nextInt() вместо nextLine()? Таким образом, вы можете позвонить nextInt() дважды и получить два числа для каждой строки.

Способ кодирования выглядит так, как если бы вы пытались использовать BufferedReader вместо Scanner.