Java:在主程序中调用方法,但是收到错误

时间:2015-04-08 14:31:41

标签: java methods

我正在学习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?

非常感谢你的帮助!

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

从您的评论中,我读到将其解析为Long适合您。我强烈建议使用String,原因如下:

  1. 带有前导零的电话号码(如国际电话号码)。整数和长期&#39;修剪&#39;领先的零,使您的电话号码无用。
  2. 如果你想在展示你的电话号码时做一些额外的事情(比如添加破折号或其他东西),你将不得不将你的整数/长整数解析为一个字符串,并且无论如何都要做你的表现魔术。
  3. 正如您刚刚发现的那样,并非每个电话号码都可以存储在32位整数中,但您已经使用Long解决了这个问题。
  4. 这可能有更多原因,但我想到了这两个原因。

答案 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,6482,147,483,647

答案 5 :(得分:0)

而不是使用int for variable phone声明它为long而不是input.nextInt()使用方法input.nextLong()。我认为这将解决您的问题。