Использование сканера Java для чтения ввода - PullRequest
0 голосов
/ 16 февраля 2019

Предположим, у меня есть следующий ввод:

3
24 1
4358 754
305 794

Когда я пытаюсь прочитать его следующим образом, он не работает:

Scanner sc = new Scanner(System.in);
while(sc.hasNextLine())
{
sc.nextLine();
int a = sc.nextInt();
int b = sc.nextInt(); 
//DoSomethingWithAandB
}

Я делаю это таким образом, потому что сначала яхочу пропустить первую строку.Затем я прочитал два целых числа.После этого, если есть другая строка, я перехожу к ней с помощью sc.nextLine () и снова читаю целые числа.Что не так?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

В приведенном выше вводе первая строка должна быть числом строк, поэтому, прочитав ее, вы можете сделать цикл, затем прочитать строку и разбить ее, чтобы получить свои числа.

Scanner in = new Scanner(System.in);
int numberOfLines = in.nextInt();

for (int i = 0; i < numberOfLines; ++i) {
    String line = in.nextLine();
    String[] lineSplit = line.split(" ");
    int a = Integer.parseInt(lineSplit[0]);
    int b = Integer.parseInt(lineSplit[1]);
    //DoSomethingWithAandB
}

Если вам не нужно читать первую строку, вы можете использовать время с in.hasNextLine()

Scanner in = new Scanner(System.in);
in.nextInt();

while (in.hasNextLine()) {
    String line = in.nextLine();
    String[] lineSplit = line.split(" ");
    int a = Integer.parseInt(lineSplit[0]);
    int b = Integer.parseInt(lineSplit[1]);
    //DoSomethingWithAandB
}
0 голосов
/ 16 февраля 2019

3 в первой строке указывает, сколько строк вам нужно прочитать, поэтому вы должны использовать эту информацию, а не полагаться только на hasNextLine () , который не использует всепредоставленная вам информация:

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

class FileInputExample {
  public static void main(String[] args) {
    File file = new File("input.txt");
    try {
      Scanner scanner = new Scanner(file);
      int n = scanner.nextInt(); // This reads the 3 in your example
      for (int line = 1; line <= n; line++) {
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        // Do something with a and b like store them in ArrayLists or something
        System.out.println(String.format("A: %d, B: %d", a, b));
      }
      scanner.close();
    } 
    catch (FileNotFoundException e) {
      e.printStackTrace();
    }
  }
}

Вывод:

A: 24, B: 1
A: 4358, B: 754
A: 305, B: 794

input.txt:

3
24 1
4358 754
305 794

Если вы хотите использовать hasNextLine () в цикле while, вам нужно пропустить первую строку с 3, вне цикла while:

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

class FileInputExample {
  public static void main(String[] args) {
    File file = new File("input.txt");
    try {
      Scanner scanner = new Scanner(file);
      scanner.nextLine(); // skip the 3 on the first line
      while (scanner.hasNextLine()) {
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        System.out.println(String.format("A: %d, B: %d", a, b));
      }
      scanner.close();
    } 
    catch (FileNotFoundException e) {
      e.printStackTrace();
    }
  }
}
...