如何使用java.util.Scanner处理多个输入?

时间:2014-07-16 11:52:35

标签: java matrix java.util.scanner

我是Java的新手,当我编写以下代码时,我遇到了这个问题。我想从用户那里得到一个方阵,但首先我得到列数,然后我得到矩阵并处理这个问题我写了这段代码:

import java.util.Scanner;

public class A {

        public static void main(String[] args) {
        int n;
        Scanner input = new Scanner(System.in);
        n = input.nextInt();
        List<List<Integer>> matrix = new ArrayList<List<Integer>>();
        for (int i = 0; i < n; i++)
        {
            matrix.add(new ArrayList<Integer>());
            for (int j = 0; j < n; j++)
            {
                 n = input.nextInt();
                 matrix.get(i).add(n);
            }
        }
   }
}

我想处理这个输入:

3
1 0 1
1 0 1
1 1 0

但是,我输入:

3<enter>
1 0 1<enter>

程序在第一个输入的行之后退出。我该如何解决?

3 个答案:

答案 0 :(得分:0)

这应该有所帮助:

import java.util.ArrayList;
import java.util.Scanner;

public class A {

public static void main(String []args) {
int n ;
Scanner input = new Scanner(System.in);
System.out.println("Columns : ");
n = input.nextInt();

ArrayList<List<Integer>> matrix = new ArrayList<List<Integer>>();
for ( int i = 0 ; i < n ; i++ )
{
    matrix.add(new List<Integer>());
    for ( int j = 0 ; j < n ; j++ )
    {
         int t = input.nextInt();
         matrix.get(i).add(t);
    }
}

/* This is to check the contents of the data structure */

for ( int j = 0 ; j < n ; j ++)
{
    System.out.println();
    for ( int k = 0 ; k < n ; k ++)
    {
        System.out.print(matrix.get(j).getElement(k) + " ");
    }
}
}
}

答案 1 :(得分:0)

如果您正在创建一个矩阵,就像在图表中使用一样来显示连接,并且您知道有多少将会尝试使用二维数组。

 public static void main(String []args) {
    int n,m ;
    Scanner input = new Scanner(System.in);
    n = input.nextInt();
    int[][] matrix = new int[n][n];
    for ( int i = 0 ; i < n ; i++ )
    { int j= 0;
        while(input.hasNext() && j< matrix[].lenght)
        {
               m = input.nextInt();
               matrix[i][j] = m;
               j++
            }
       }
  }
}

答案 2 :(得分:0)

1 请记住在需要时导入一些功能;必须明确导入java.util.Scanner

2 此处不需要与(Array)List混淆;使用常规数组。

3 Scanner.nextInt()读取整行并在开头解析int。在这里,你需要用空格分割输入。

最终代码:

import java.util.Scanner; // note 1
import java.util.Arrays; // small utility

class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int size = sc.nextInt(); // load the size
    int[][] matrix = new int[size][size]; // create a new array; note 2
    for(int row = 0; row < size; ++row) {
      String[] input = sc.nextLine().split(" "); // read a row
      input = Arrays.copyOf(input, size); // pad/truncate the array
      int[] processed = new int[size]; // for storing a row
      for(int entry = 0; entry < size; ++entry)
        processed[entry] = Integer.parseInt(input[entry]); // parse integers; note 3
      matrix[row] = processed; // set the row
    }
    // for testing purposes:
    for(int row = 0; row < size; ++row) {
      for(int col = 0; col < size; ++col)
        System.out.print(matrix[row][col] + " ");
      System.out.println();
    }
  }
}