【问题标题】:Reading in integers to a 2D array将整数读入二维数组
【发布时间】:2017-01-14 17:42:26
【问题描述】:

我需要帮助将整数读入 N x N 维的二维方阵。

例如,如果用户输入是:

123  
333  
414

然后我需要一个数组:

{
 {1, 2, 3}, 
 {3, 3, 3}, 
 {4, 1, 4}
}

我遇到的问题是这些整数之间没有空格。如果有空间,我可以做

for (int i = 0 ; i < N; i++) {
    for(int j = 0; j < N ; j++) {
        myArray[i][j] = scan.nextInt();
    }
}

我通过尝试使用子字符串并将其解析到数组中来解决这个问题,尽管我没有得到任何结果。

另一种方法(编辑)

for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
        myArray[i][j] = Integer.parseInt(scan.nextLine().substring(j, j+1));
    }
}

这也不起作用 - 输入三行后它继续运行。

【问题讨论】:

  • 将您的输入读取为字符串,使用toCharArray 方法进行转换,然后添加到您的 3 维数组中。
  • 有什么办法可以将其保存为二维 int 数组?我刚刚添加了另一种我认为可行的方法。
  • 这些整数之间没有空格.......那些整数在 0 到 9 之间呢???
  • 试试这个for (int i = 0; i &lt; N; i++) { String s = scan.nextLine(); for (int j = 0; j &lt; N; j++) { myArray[i][j] = Integer.parseInt(substring(j, j+1)); } }

标签: java arrays multidimensional-array


【解决方案1】:

也许这会有所帮助:

public static void main( String[] args ) {

    Scanner scanner = new Scanner( System.in );

    int[][] array = new int[3][3];

    for ( int[] ints : array ) {
        char[] line = scanner.nextLine().toCharArray();
        for ( int i = 0; i < line.length; i++ ) {
            ints[i] = Character.getNumericValue( line[i] );
        }
    }

    Arrays.stream( array ).forEach( x -> System.out.println( Arrays.toString( x ) ) );
}

同样适用于 Java 8

public static void main( String[] args ) {

    Scanner scanner = new Scanner( System.in );

    int[][] array = new int[3][3];

    for ( int[] ints : array ) {
        ints = scanner.nextLine().chars().map( Character::getNumericValue ).toArray();
    }

    Arrays.stream( array ).forEach( x -> System.out.println( Arrays.toString( x ) ) );
}

【讨论】:

    【解决方案2】:

    原因是java扫描仪将整数(例如:123)作为一个数字。

    for (int i = 0 ; i < N; i++) {
            int p = scan.nextInt();
            for (int j = N-1; j >= 0; j--) {
                array[i][j] = p % 10;
                p = p / 10;
            }
        }
    

    【讨论】: