Java: 在控制台中获取String输入并解析为Int

Java: Taking String input in console and parsing into Int

要求如下..

输入:第一行输入将由一个数字N组成,即9*9的数字矩阵。接下来的 N*9 行将包含指定格式的拼图。

输出:一个数字,它是所有给定谜题的主对角线上所有数字的总和。

下面是我写的代码:(逻辑是否正确?为什么没有产生想要的输出?)

import java.util.Scanner;

class TheInvitationGame{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a[][][] = new int[n][9][9];
int arr[][] = new int [10][9];

int sum = 0;
String inpline[][] = new String[n][9];

for(int k=0; k<n; k++){
    for(int i=0; i<9; i++){
        inpline[k][i] = sc.next();

        for(int j=0; j<9; j++){
            a[k][i][j] = inpline[k][i].charAt(j);
            if(i==j){
                sum += a[k][i][j];      
            }   
        }
        System.out.println();
    }
}

System.out.println(sum);

}
}

这里,我想取3维数组[k][i][j],其中k用来迭代NO。 9*9 输入矩阵,i = 用户将输入的行(字符串格式),j = 否。矩阵中也将用作 charAt() 变量的列数

以下是堆栈跟踪:(464 输出应该是 32(0+2​​+4+6+8+0+2+4+6)

1 012345678

123456789

234567890

345678901

456789012

567890123

678901234

789012345

890123456

464

使用 substring(j,j+1); 而不是 charAt(j); 或者你可以简单地将它转换为 int.

charAt 方法 returns 一个 char 值,而 Integer.parseInt() 采用 String 参数。您可以使用 substring 方法作为 varName[i][k].substring(j,j+1) 其中 j 是数字的索引。

这里的问题是您将 char 值放入 int 数组导致意外行为。

a[k][i][j] = inpline[k][i].charAt(j);

我不确定,但我认为这会将与引用 char 值相关的 ASCII 值放入您的 int 数组。这会给你意想不到的答案。
您可以通过使用其中一个答案中描述的 substring() 方法并将生成的字符串解析为 int 来解决此问题,或者您可以使用 Character.getNumericValue(Char ch) 方法。此方法将 return 相关 char 变量的 int 值。所以你的代码应该看起来像

a[k][i][j] = Character.getNumericValue(inpline[k][i].charAt(j));

这将解决您的问题。我对此进行了测试,它提供了所需的输出。

请参阅 Java API 文档了解更多详情。