我正在尝试编写一个类,该类将用户输入的电话号码作为字符串输入,然后将每个数字存储在一个数组中。我使用Long.parseLong将字符串转换为long。这是应该将每个数字存储在数组中的函数。
public void storetoarray()
//Turn the strings to longs
//A loop chops of the last digit and stores in an array
{
phonelong = Long.parseLong(initialphone);
phonetemp1 = phonelong;
for (int i = phonelength; i>=0; i--)
{
phonearray[i-1] = phonetemp1%10;
phonetemp2 = phonetemp1 - phonetemp1%10;
phonetemp1 = phonetemp2/10;
System.out.print("Phone temp 2" + phonetemp2 + phonetemp1);
}
}
该循环的逻辑是使用%10找到电话号码的最后一位数字,然后从原始电话号码中减去该号码。然后将新差异设置为phonetemp1 / 10.
示例4158884532%10 = 2.它存储在phonearray [9]中。然后减去phonetemp2给我们4158884530.除以10,你得到415888453.应该准备存储下一个数字。
出了什么问题?谢谢你的帮助!
答案 0 :(得分:0)
您的phonearray
空间不足:您正在访问索引9
,但phonearray
的元素少于十个。
您需要像这样分配数组:
phonearray = new int[10];
解决此问题后,请更改循环以避免访问索引-1
(这是i
达到零时会发生的情况。)
最后,没有必要从phonetemp1%10
中减去phonetemp1
:整数除法会降低分数,所以你可以这样做:
phonearray[i-1] = phonetemp1%10;
phonetemp1 /= 10;
答案 1 :(得分:0)
如果您已使用与initialPhone长度相同的大小正确初始化了数组,则不应看到此异常。您的代码宁愿产生ArrayIndexOutOfBoundException:-1 重新编写您的代码,并按预期工作:
import java.util.Arrays;
public class TestMain {
public static void main(String[] args) {
String initialPhone = "4158884532";
int phoneLength = initialPhone.length();
long[] phoneArray = new long[phoneLength];
Long phoneNum = Long.parseLong(initialPhone);
Long phonetemp1 = phoneNum;
for (int i = phoneLength; i > 0; i--) {
phoneArray[i - 1] = phonetemp1 % 10;
Long phonetemp2 = phonetemp1 - phonetemp1 % 10;
phonetemp1 = phonetemp2 / 10;
System.out.println("Phone temp 2 --> " + phonetemp2 + phonetemp1);
}
System.out.println(Arrays.toString(phoneArray));
}
}
享受!