输出字符串的数字时得到一个额外的数字
Getting an additional number when outputting numbers of a String
我有一个相当简单的问题,但我对为什么会这样感到困惑:下面的代码块是一种方法,该方法 returns 一个最初有数字 and/or 的数字字符串特殊的角色。这里:
public static int[] toNumArray (String string) {
int[] x = new int[countNums(string)];
int j = 0;
for (int i = 0; i < string.length(); i++) {
if (Character.isDigit(string.charAt(i))) {
//System.out.println(string.charAt(i));
x[j] = Character.digit(string.charAt(i), 10);
j++;
}
}
return x;
}
现在,我了解到这种方法实际上正在发挥作用。我遇到的问题是在调用打印方法时输出结果,即:
public static void printArray(int[] nums) {
for( int i = 0; i < nums.length; ++i ) {
System.out.print( nums[i] + ", ");
}
int last = nums.length - 1;
System.out.println( nums[last] );
System.out.println();
}
当我在 Main 中调用这些方法时,我得到一个额外的数字,它恰好总是最后一个数字。这里:
String s = "12345abc";
printArray(toNumArray(s));
我明白了
1, 2, 3, 4, 5, 5
为什么会这样?我本身成功通过了所有测试用例,但这显然是不对的。
在你的代码中循环
for( int i = 0; i < nums.length; ++i ) {
System.out.print( nums[i] + ", ");
}
您将打印数组中的所有数字(从 1 到 5)
当您通过此循环退出时,您会看到这些行:
int last = nums.length - 1;
System.out.println( nums[last] );
此处您将打印数组的最后一个元素(编号 5),但您在 for 循环中使用了打印,因此您仍保持在同一行。
所以你将拥有:
1, 2, 3, 4, 5, 5
这样:通过你的循环1, 2, 3, 4, 5,
通过最后一个 println(在 for 循环之外):5
编辑评论后:
要删除最后一个逗号,您可以按如下方式解决:
在 for 循环中,您必须使用如下定义的变量:
String res = "";
for( int i = 0; i < nums.length; ++i ) {
res += nums[i] + ", ";
}
for 循环外:
res = res.substring(0, res.length - 1);
System.out.println(res);
这是您的 printArray(int[] nums)
方法中的代码,它再次打印最后一位数字:
int last = nums.length - 1;
System.out.println( nums[last] );
System.out.println();
数组从 0 开始计数。
所以对于 5 位数组,索引是 0 1 2 3 4。
你看 4 已经是 i < nums.length。将其设置为 nums.length - 1,以省略结尾的冒号。
我有一个相当简单的问题,但我对为什么会这样感到困惑:下面的代码块是一种方法,该方法 returns 一个最初有数字 and/or 的数字字符串特殊的角色。这里:
public static int[] toNumArray (String string) {
int[] x = new int[countNums(string)];
int j = 0;
for (int i = 0; i < string.length(); i++) {
if (Character.isDigit(string.charAt(i))) {
//System.out.println(string.charAt(i));
x[j] = Character.digit(string.charAt(i), 10);
j++;
}
}
return x;
}
现在,我了解到这种方法实际上正在发挥作用。我遇到的问题是在调用打印方法时输出结果,即:
public static void printArray(int[] nums) {
for( int i = 0; i < nums.length; ++i ) {
System.out.print( nums[i] + ", ");
}
int last = nums.length - 1;
System.out.println( nums[last] );
System.out.println();
}
当我在 Main 中调用这些方法时,我得到一个额外的数字,它恰好总是最后一个数字。这里:
String s = "12345abc";
printArray(toNumArray(s));
我明白了
1, 2, 3, 4, 5, 5
为什么会这样?我本身成功通过了所有测试用例,但这显然是不对的。
在你的代码中循环
for( int i = 0; i < nums.length; ++i ) {
System.out.print( nums[i] + ", ");
}
您将打印数组中的所有数字(从 1 到 5)
当您通过此循环退出时,您会看到这些行:
int last = nums.length - 1;
System.out.println( nums[last] );
此处您将打印数组的最后一个元素(编号 5),但您在 for 循环中使用了打印,因此您仍保持在同一行。
所以你将拥有:
1, 2, 3, 4, 5, 5
这样:通过你的循环1, 2, 3, 4, 5,
通过最后一个 println(在 for 循环之外):5
编辑评论后:
要删除最后一个逗号,您可以按如下方式解决:
在 for 循环中,您必须使用如下定义的变量:
String res = "";
for( int i = 0; i < nums.length; ++i ) {
res += nums[i] + ", ";
}
for 循环外:
res = res.substring(0, res.length - 1);
System.out.println(res);
这是您的 printArray(int[] nums)
方法中的代码,它再次打印最后一位数字:
int last = nums.length - 1;
System.out.println( nums[last] );
System.out.println();
数组从 0 开始计数。
所以对于 5 位数组,索引是 0 1 2 3 4。
你看 4 已经是 i < nums.length。将其设置为 nums.length - 1,以省略结尾的冒号。