我正在学习Java,正在练习创建方法,然后在我的主程序中调用它们。为了实践这一点,我创建了一个简单的程序,该程序应该从未来的骑马者那里收集数据。
以下是主要应用程序:
public class CompleteApp {
public static void main(String[] args) {
TaskOne weight1 = new TaskOne();
TaskTwo nameagehealth1 = new TaskTwo();
TaskThree phoneaddress1 = new TaskThree();
if (weight1.Weight() < 250) {
nameagehealth1.NameAgeHealth();
phoneaddress1.AddressPhone();
}
else {
System.out.println("Thanks for checking!");
}
}
}
我创建了三个单独的类来完成不同的任务。以下是提示错误的类:
import java.util.Scanner;
public class TaskThree {
static void AddressPhone() {
Scanner input = new Scanner(System.in);
System.out.println("Please tell me your address: ");
String address = input.nextLine();
System.out.println("Please tell me your phone number: ");
int phone = input.nextInt();
System.out.println("You said your address is " + address + " and your phone is " + phone + ".");
System.out.println("Thank you for the information, we'll be in touch soon to schedule your ride.");
}
}
错误:
Exception in thread "main" java.util.InputMismatchException: For input string: "3037201234"
at java.util.Scanner.nextInt(Scanner.java:2123)
at java.util.Scanner.nextInt(Scanner.java:2076)
at TaskThree.AddressPhone(TaskThree.java:10)
at CompleteApp.main(CompleteApp.java:13)
它似乎表明错误在电话号码中,并且正在读取为字符串,但我将其设为整数。我不确定我在哪里出错了。另外,如果用户输入了这样的电话号码,我将如何处理:303-720-1234 vs 3037201234?
非常感谢你的帮助!
答案 0 :(得分:2)
由于Sibbo提到的长度无法将其存储为int,并且您关注格式化,因此应将其存储为String。如果您必须进行任何类型的检查以确保用户以正确的格式输入数据(1234567890或123-456-7890),那么您应该查看正则表达式。如果在字符串上运行正则表达式,那么您将能够获得一个布尔结果来告诉您它是否有效。
答案 1 :(得分:2)
为什么不将电话号码表示为字符串并使用scanner.next()?如前所述,当一个phonenumber从0开始时,如果你使用除String之外的任何东西,那么这个零就会被删除,所以我认为这是最好的方法。
答案 2 :(得分:2)
从您的评论中,我读到将其解析为Long
适合您。我强烈建议使用String
,原因如下:
这可能有更多原因,但我想到了这两个原因。
答案 3 :(得分:1)
int
数据类型是32位带符号的二进制补码整数。它的最小值为-2,147,483,648,最大值为2,147,483,647(含)。您的输入值超出int
的范围。
您应将电话号码存储为String
而不是int
。如果要处理303-720-1234
之类的数字,请将其解析为字符串,删除-
字符然后再使用它。
答案 4 :(得分:0)
输入3037201234
太大而无法表示为int
,因此无法将其解析为int
。
Java中的整数范围从−2,147,483,648
到2,147,483,647
。
答案 5 :(得分:0)
而不是使用int for variable phone声明它为long而不是input.nextInt()使用方法input.nextLong()。我认为这将解决您的问题。