Java:在主程序中调用方法,但得到一个错误

Java:在主程序中调用方法,但得到一个错误,java,methods,Java,Methods,我正在学习Java,正在练习创建方法,然后在主程序中调用它们。为了实践这一点,我创建了一个简单的程序,该程序旨在收集来自未来骑马者的数据 以下是主要应用程序: public class CompleteApp { public static void main(String[] args) { TaskOne weight1 = new TaskOne(); TaskTwo nameagehealth1 = new TaskTwo(); TaskThree phon

我正在学习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!");
    }
  }
}
错误:

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,我将如何处理

非常感谢你的帮助

输入3037201234太大,无法表示为int,因此无法将其解析为int

Java中的整数范围为−2147483648到2147483647。

int数据类型是32位有符号2的补码整数。它的最小值为-2147483648,最大值为2147483647(含)。您的输入值超出int的范围。
您应该将电话号码存储为字符串而不是int。如果您想处理303-720-1234这样的号码,请将其解析为字符串,删除-字符,然后使用它。

由于Sibbo提到的长度,无法将其存储为int,并且您关心的是格式,因此您应该将其存储为字符串。如果您必须执行任何类型的检查,以确保用户以正确的格式输入数据(123456780或123-456-7890),那么您应该查看正则表达式。如果在字符串上运行正则表达式,则可以得到一个布尔结果,告诉您该结果是否有效。

为什么不将电话号码表示为字符串并使用scanner.next?如前所述,当一个电话号码以0开头时,如果你使用字符串以外的任何东西,这个零将被删除,因此我认为这是最好的方法。

从你的评论中,我了解到解析它很长时间对你有用。但是,出于以下几个原因,我强烈建议使用字符串:

带有前导零的电话号码,如国际电话号码。整数和长“修剪”前导零,使您的电话号码毫无用处。 如果您想在显示电话号码时做一些额外的事情,比如添加破折号或其他任何东西,那么您必须将整数/长字符串解析回字符串,并执行表示魔术。 正如您刚刚发现的,并不是每个电话号码都可以存储在32位整数中,但您已经使用了一个长整数解决了这个问题。
这可能有更多的原因,但我想到了这两个原因。

不要对变量phone使用int,而是将其声明为long,而不是input.nextLong。我认为这将解决您的问题。

整数中最大的值是什么?为什么要将电话号码存储为整数?除此之外,永远不要将电话号码存储为整数。如果您的电话号码以0或多个零开头,比如国际电话号码,该怎么办?如果使用整数,前导零将被“修剪”,您的电话号码将不再正确。我将其更改为长且仍然没有骰子。我可能会使用字符串。您尝试过下一个长方法吗?仅仅改变电话的类型并不能解决问题。啊。。我忘了在我的代码中将int切换为long。工作得很有魅力!完美的我要试一试。谢谢好主意。谢谢你花时间帮我。所以。。在任何情况下,如果用户可以选择以数字或文字输入数据,我应该选择字符串吗?似乎最有意义。这有什么坏处吗?其实没有,只要你记得做一些形式的解析来防止人们在你的电话号码中添加字母数字字符。
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)