我正在解决亚马逊采访街网站https://amazon.interviewstreet.com/challenges上的连接集问题,我的代码完全适用于该网站提供的公共示例测试用例,但我在线获取隐藏测试用例的NumberFormatException 25.以下是我的代码中解析输入的部分:
public class Solution
{
static int [][] arr;
static int num = 2;
static int N;
static String output = "";
public static void main(String[] args) throws IOException
{
int T;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
T = Integer.parseInt(reader.readLine());
int i, j, k;
for(i=0;i<T;i++) //the loop for each of the 'T' test cases
{
N = Integer.parseInt(reader.readLine()); //line 25
arr = new int[N][N];
for(j=0;j<N;j++) //the loops for storing the input 2D array
{
for(k=0;k<N;k++)
{
arr[j][k] = Character.getNumericValue(reader.read());
reader.read();
}
}
我花了很多时间试图找出问题所在,但我一直没有成功。感谢您的帮助。
编辑:问题陈述在网站上给出如下:
给定一个二维矩阵,其中只有1和0。找到该矩阵中连接集的总数。
说明: 连接集可以被定义为其上具有1个并且在该集合中具有至少一个其他小区的小区组,它们与所述小区共享邻居关系。其中包含1并且没有周围邻居的小区可以被认为是其中包含一个小区的集合。邻居可以被定义为在8个可能方向(即N,W,E,S,NE,NW,SE,SW方向)上与给定小区相邻的所有小区。一个小区不是它自己的邻居。
输入格式: 输入的第一行包含T,测试用例数。 然后按照T测试用例。每个测试用例都给出了格式。 N [表示矩阵N X N的维数]。 其次是N行,每行有N个数字。
输出格式: 对于每个测试用例,打印一行,它具有连接组件的数量。
示例输入:
4
4
0 0 1 0
1 0 1 0
0 1 0 0
1 1 1 1
4
1 0 0 1
0 0 0 0
0 1 1 0
1 0 0 1
5
1 0 0 1 1
0 0 1 0 0
0 0 0 0 0
1 1 1 1 1
0 0 0 0 0
8
0 0 1 0 0 1 0 0
1 0 0 0 0 0 0 1
0 0 1 0 0 1 0 1
0 1 0 0 0 1 0 0
1 0 0 0 0 0 0 0
0 0 1 1 0 1 1 0
1 0 1 1 0 1 1 0
0 0 0 0 0 0 0 0
示例输出:
1
3
3
9
约束:
0&lt; T&lt; 6
0&lt; N&lt; 1009
请注意,上面的示例测试用例适用于我的代码。隐藏的测试用例给出了例外。
答案 0 :(得分:1)
好的,所以我修改了我的程序以合并LeosLiterak的建议来使用trim(),新代码如下:
public class Solution
{
static int [][] arr;
static int num = 2;
static int N;
static String output = "";
public static void main(String[] args) throws IOException
{
int T;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
T = Integer.parseInt(reader.readLine().trim());
int i, j, k;
for(i=0;i<T;i++)
{
N = Integer.parseInt(reader.readLine().trim());
arr = new int[N][N];
for(j=0;j<N;j++)
{
String [] temp = reader.readLine().trim().split(" ");
for(k=0;k<N;k++)
{
arr[j][k] = Integer.parseInt(temp[k]);
}
}
因此,我不是读取输入矩阵中的每个字符并将其转换为整数并存储,而是现在读取整行并修剪并拆分字符串并将每个子字符串转换为整数并存储在我的数组中。
答案 1 :(得分:1)
从评论中复制:尝试删除所有白色字符,如空格,制表符等。目标定义不禁止这些字符,但不能将其解析为数字。你必须先修剪它们。
答案 2 :(得分:0)
T = Integer.parseInt(reader.readLine());这个问题出在哪里。当用户尝试给出字符串时 它转换成整数并运行循环?例如:如果用户给出了&#39; R&#39;作为char而不是整数转换如何发生并且循环会进一步运行?没错。
答案 3 :(得分:0)
在解析为int之前检查它的编号。
Character.isNumber()