0

我正在尝试编写一个类,该类将用户输入的电话号码作为字符串,然后将每个数字存储在一个数组中。我使用 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。应该准备好存储下一个数字。

出了什么问题?谢谢您的帮助!

4

2 回答 2

0

phonearray的空间不足:您正在访问 index 9,但phonearray元素少于十个。

您需要像这样分配数组:

phonearray = new int[10];

一旦你解决了这个问题,改变循环以避免访问索引-1(这就是当i达到零时会发生的事情)。

最后,不需要phonetemp1%10phonetemp1: 中减去整数除法,所以你可以这样做:

phonearray[i-1] = phonetemp1%10;
phonetemp1 /= 10;
于 2013-06-01T00:46:05.837 回答
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));
  }
}

享受!

于 2018-10-30T02:54:43.607 回答