当前位置: 首页 > 知识库问答 >
问题:

输入字符串而不是整数(Java)

燕翼
2023-03-14

我是一个绝对的初学者,没有任何编程语言的经验。

我写了一个程序作为将阿拉伯数字转换成罗马数字的练习。它起作用了。然而,如果输入的是字符串而不是整数,我想添加一部分来处理这个问题。我不知道该怎么做。我试图使用try/catch,但我不知道如何正确使用它。现在程序要求我输入两次数字。怎么办?

以下是他的主要方法:

public static void main(String[] args) {

    int numArabic; 
    boolean validEntry;

    try {
            System.out.println("Enter an integer number between 1 and 3999!");
            Scanner scan = new Scanner(System.in); 
            numArabic = scan.nextInt();
            validEntry = true;
        } catch (InputMismatchException e) {
            System.out.println("Entered value is not an integer!");
        }

    System.out.println("Enter an integer number between 1 and 3999!");
    Scanner scan = new Scanner(System.in); 
    numArabic = scan.nextInt();                            

    if ((numArabic < 1) || (numArabic > 3999)) {
            System.out.println();
            System.out.print("Wrong number. ");
            System.out.print("Enter an integer number between 1 and 3999!");
            System.out.println();
            }
    else {
            String numRoman1 = toRomanOne(numArabic % 10);
            String numRoman2 = toRomanTwo(((numArabic / 10) % 10));
            String numRoman3 = toRomanThree(((numArabic / 100) % 10));
            String numRoman4 = toRomanFour(numArabic / 1000);
            System.out.print("The number " + numArabic + " is equal to: ");
            System.out.print(numRoman4+numRoman3+numRoman2+numRoman1 + ".");
    }
}

共有3个答案

农飞星
2023-03-14
public static void main(String[] args) {

    int numArabic; 
    boolean validEntry = false;

    while (validEntry = false){
    try {

            System.out.println("Enter an integer number between 1 and 3999!");
            Scanner scan = new Scanner(System.in); 
            numArabic = scan.nextInt();
            validEntry = true;
        }

        catch (InputMismatchException e) {
            System.out.println("Entered value is not an integer!");
            validEntry = false;
        }
    }                 

    if ((numArabic < 1) || (numArabic > 3999)) {
            System.out.println();
            System.out.print("Wrong number. ");
            System.out.print("Enter an integer number between 1 and 3999!");
            System.out.println();
            }
    else {
            String numRoman1 = toRomanOne(numArabic % 10);
            String numRoman2 = toRomanTwo(((numArabic / 10) % 10));
            String numRoman3 = toRomanThree(((numArabic / 100) % 10));
            String numRoman4 = toRomanFour(numArabic / 1000);
            System.out.print("The number " + numArabic + " is equal to: ");
            System.out.print(numRoman4+numRoman3+numRoman2+numRoman1 + ".");
    }
}
黄信厚
2023-03-14

您可以使用Scanner#hasNextInt()方法来检查。

如果扫描仪输入中的下一个标记可以解释为int值,则此方法返回true。

if (scan.hasNextInt()) {
   // Do the process with Integer.
} else {
   // Do the process if it is not an Integer.
}

请注意,这将覆盖所有不是整数,而不仅仅是字符串

籍弘伟
2023-03-14

您的控制机制是真实的,但只起作用一次。你必须把它放在一个循环中,这样它才能允许用户最后输入一个整数。

boolean validEntry;

do {
   try {
      System.out.println("Enter an integer number between 1 and 3999!");
      Scanner scan = new Scanner(System.in); 
      numArabic = scan.nextInt();
      validEntry = true;
   }
   catch (InputMismatchException e) {
      validEntry = false;
      System.out.println("Entered value is not an integer!");
   }
}
while(!validEntry);
 类似资料:
  • 对不起,新手:/。所以当我在“输入你的年龄”中键入一封信时,我有这个问题 输入您的年龄:q 线程“main”java.util.InputMismatchException中出现异常 在java.util.scanner.throwfor(Scanner.java:909) 我想如果我打了任何一个字母,它显示“无效输入”。有人能帮我吗?[对不起,糟糕的英语]

  • 问题内容: 当我使用pg_query,pg_fetch_assoc从PostgreSQL数据库获取数据时,所有数字字段都以字符串形式返回。有没有解决的办法,还是我必须按照自己的方式对每个字段进行类型转换? 问题答案: 这就是PHP所做的。从手册: 数组中的每个值都表示为一个字符串。

  • 问题内容: System.out.print(“Name : “); String name = in.nextLine(); 输出将是: 名称:测试 年龄:20 建立成功 当我调试它们时,它不会读取“ city”的用户输入。但是,当我将“年龄”的数据类型更改为字符串时,它将读取。我如何在读取城市用户输入的系统中将age的数据类型保持为整型? 问题答案: 读取年龄后,由于缓冲区中仍然有换行符,请将

  • 问题内容: 我从一些python任务开始,使用gensim时遇到问题。我正在尝试从磁盘加载文件并进行处理(将它们分开并用lowercase()对其进行处理) 我的代码如下: 列表(dictionary_arr)包含所有文件中所有单词的列表,然后使用gensim corpora.Dictionary处理该列表。但是我遇到了一个错误。 我无法理解有什么问题,需要一些指导。 问题答案: 在diction

  • 我使用的是Laravel,并有一个查询,它使用列的进行选择: 我已经安装了mysqldn,AFAIK Laravel使用。 但是是一个字符串,不管列是什么类型。(它是一个整数列) 另外,如果我这样做: < code>foo_bar以整数形式返回。

  • 问题内容: 从表单获取变量: 如果我输入1并使用gettype($ POST _ [‘a’]),它将返回字符串,可以输入int吗?因为在此之后,我要检查该变量是否为int。 更新 得到的答案是,它总是返回字符串,他们为我提供了使用(int)或intval()的方法,但是如果它真的像’a’这样的字符串,它会返回0,但它也可能是整数值0,如何克服这个问题? 更新 编辑错字后,Brad Christie