【问题标题】:Exception in thread "main", I think Integer.ParseInt() is stuck but I dont know why线程“main”中的异常,我认为 Integer.ParseInt() 卡住了,但我不知道为什么
【发布时间】:2013-05-26 08:09:12
【问题描述】:

我的程序从用户那里获得 2 个数字,一个长度为 10,一个长度为 3。我将它们作为字符串获取。然后我尝试使用 Integer.parseInt() 将它们转换为整数。我没有代码错误,但是当我运行程序时出现以下错误。

线程“main”java.lang.NumberFormatException 中的异常:对于输入字符串:“4159238189” 在 java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 在 java.lang.Integer.parseInt(Integer.java:495) 在 java.lang.Integer.parseInt(Integer.java:527) 在 assn3.secrets.storetoarray(Assn3.java:75) 在 assn3.Assn3.main(Assn3.java:30) Java 结果:1


public class Assn3 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    secrets agent = new secrets();

    agent.getnumber();
    agent.storetoarray();
}
}

class secrets{
private String initialphone, key;
//private String phonestring, keystring;
private int phonelength, keylength;
private int phoneint, keyint;
private int phonetemp1, phonetemp2;
double[] phonearray = new double[phonelength];
double[] keyarray = new double[keylength];


public void getnumber()
//get the phone number and security code
//If the number and key are not the right length the program will stop
{         
   Scanner input = new Scanner(System.in);
   System.out.print("Please enter the phone number you need encrypted\n"
           + "just enter the 10 digits no dashes\n");
   initialphone = input.next(); 
   phonelength = initialphone.length();
   if(phonelength !=10){
       System.out.print("nope");
       System.exit(0);
   }
   System.out.print("Please enter the encryption key\n"
           + "just 3 digits please\n");
   key = input.next();
   keylength = key.length();
   if(keylength !=3){
       System.out.print("nope");
       System.exit(0);
   }

}

public void storetoarray()
        //Turn the strings to ints
        //A loop chops of the last digit and stores in an array
{



    phoneint = Integer.parseInt(initialphone);
    phonetemp1 = phoneint;
    keyint = Integer.parseInt(key);


    for (int i = phonelength; i>=0; i--)
    {
        phonearray[i] = phonetemp1%10;
        phonetemp2 = phonetemp1 - phonetemp1%10;
        phonetemp1 = phonetemp2;
        System.out.print("Phone temp 2" + phonetemp2);
    }



}

}

【问题讨论】:

    标签: exception main parseint


    【解决方案1】:

    Integers(和ints)的值只能达到Integer.MAX_VALUE,即(2^31)-1——大约20亿。你的输入比那个大,这使得它不是一个可解析的int,所以parseInt() 抛出异常。可以使用Long.parseLong(),它具有更高的MAX_VALUE,但出于您的目的,您可能根本不需要您的变量是数字对象。由于您没有对其执行任何数学运算,因此您很可能只是将其保留为 String

    编辑:乍一看,我看到您正在对电话号码执行一些算术运算,但使用String 操作很可能会达到相同的效果。很难说你在那里做什么。

    【讨论】:

    • 非常感谢您的反馈。这太疯狂了,我想到了这样的事情!我基本上是拿一个 10 位数的电话号码,然后我想把它分成每个单独的数字。然后我将操纵这些数字。 secrets 类有一种方法可以从用户那里获取输入,然后另一种方法可以分割 10 位数字。
    • 您可以使用String#subString() 将其拆分。根据您打算如何操作数字,如果需要,您可以将每个子字符串解析为 int。或者,最终,Long 可能更适合您。
    【解决方案2】:

    整数是有符号的 32 位类型,范围从 –2,147,483,648 到 2,147,483,647。 long 是有符号的 64 位类型,适用于 int 类型不足以容纳所需值的情况,范围从 –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。这在需要大整数时非常有用。

    试试这行代码-

    long phoneint = Long.parseLong(initialphone);
    long phonetemp1 = phoneint;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多