我有一个相当简单的问题,但我很困惑为什么会发生这种情况:下面的代码块是一个返回最初有数字和/或特殊字符的数字字符串的方法。这里:
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
为什么会这样?我本身成功通过了所有测试用例,但这显然不对。
答案 0 :(得分:0)
在循环中的代码中
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 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);
答案 1 :(得分:0)
以下是printArray(int[] nums)
方法中的代码,它再次打印最后一位数字:
int last = nums.length - 1;
System.out.println( nums[last] );
System.out.println();
答案 2 :(得分:0)
数组从0开始计算。
因此,对于5位数组,索引为0 1 2 3 4.
你看到4已经是我&lt; nums.length。将其设置为nums.length - 1,以省略尾随冒号。