我的程序从用户获得2个数字,一个长度为10,一个长度为3.我将它们作为字符串获取。然后我尝试使用Integer.parseInt()将它们转换为整数。我没有代码错误,但是当我运行程序时,我收到以下错误。
线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“4159238189” at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 在java.lang.Integer.parseInt(Integer.java:495) 在java.lang.Integer.parseInt(Integer.java:527) at 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);
}
}
}
答案 0 :(得分:1)
Integer
s(和int
s)的值最多为Integer.MAX_VALUE
,即(2 ^ 31)-1 - 约为20亿。您的输入大于此值,这使得它不是可解析的int
,因此parseInt()
会抛出异常。它可以使用Long.parseLong()
,它具有更高的MAX_VALUE
,但出于您的目的,您可能根本不需要将变量作为数字对象。由于您没有对其执行任何数学运算,因此您很可能只将其保留为String
。
编辑:第二眼我看到你正在对电话号码进行一些算术运算,但String
操作最有可能达到同样的效果。很难说你在那里做什么。
答案 1 :(得分:0)
integer是带符号的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;