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 文档了解更多详情。
要求如下..
输入:第一行输入将由一个数字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 文档了解更多详情。