我在Java中编写了以下代码来分隔整数。示例:12345至1 2 3 4 5
以下是代码:
public class Modulus {
public static void main(String[] args) {
int number=Integer.parseInt(args[0]);
String counter= Integer.toString(number);
int count=(int)(counter.length()-1);
答案 0 :(得分:3)
创建数组时,您希望counter.length()
不是counter.length()-1
。数组的索引转到n-1
,而不是字符串的长度(n
)。
当您循环播放数组时,您希望从count-1
开始,然后从那里开始。
如果数字为12345
,那么您的数组必须大小为5
,以保留5位数,并且索引来自0-4
。因此,您希望使用count
创建数组,并开始在count-1
打印。
这应该解决你的索引越界问题,但你也有其他问题。
注意,一旦找到零,你的循环就会停止,即使它位于数字的中间位置。因此,如果您有3405,您的应用将打印5然后停止。
此外,对您的问题的评论暗示了整体更简单的方法,尽管您正在做的事情对学习很好。
答案 1 :(得分:0)
从第一个while循环开始,你将计算> = 0评估为false - 计数将为负数。
进入第二个while循环,你试图评估track [count]。如果count为负数,则抛出ArrayIndexOutOfBoundsException。
正如hvgotcodes所指出的那样编辑 - 您看到的异常实际上是在代码中提前抛出的。
int [] track = new int[count]; // int of length count - indexed 0 to count-1
while (num > 0 && count>=0) {
track[count]=(num % 10); // get value indexed count - out of bounds!
一旦解决了这个问题,您可能会遇到我发现的问题。 ;)
答案 2 :(得分:0)
数组索引从零开始。 所以如果你做int count =(int)(counter.length() - 1); 如果假设您的计数为3,则可以使用索引0,1,2 当您编写track [count] =(num%10)时,您尝试跟踪[3],从而导致错误。
答案 3 :(得分:0)
试试这个:
counter.replaceAll(".(?=.)", "$0 ")
它将用空格的字符替换每个字符。
答案 4 :(得分:0)
试试这个:
public class Modulus {
public static void main(String[] args) {
String numString = "12345";
int num = Integer.parseInt(numString);
char[] numCharArray = numString.toCharArray();
for(int i=0;i<numCharArray.length;i++){
System.out.print(numCharArray[i]+i != numCharArray.length-1 ? " " : "");
}
}
}