繁体   English   中英

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);

}
}

在这里,我希望采用3D数组[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

这里的问题是你将一个char值放到一个int数组中导致意外的行为。

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

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

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

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

有关更多详细信息,请参阅Java API文档。

使用substring(j,j + 1); 而不是charAt(j); 要么你可以简单地将它强制转换为int

charAt方法返回char值,而Integer.parseInt()接受String参数。 你可以使用substring方法作为varName [i] [k] .substring(j,j + 1),其中j是数字的索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM