Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在同一用户输入中接受字符串或整数_Java_User Input - Fatal编程技术网

Java 如何在同一用户输入中接受字符串或整数

Java 如何在同一用户输入中接受字符串或整数,java,user-input,Java,User Input,在Java中,我想接受用户输入作为整数或字符串,但无论我做什么,我总是会得到一个错误 我的代码非常简单(我是初学者): 我希望用户也能够按“e”退出 我试过几种方法: 1) 要将行1转换为字符串,请执行以下操作: if((String)(row1).equals("e"){ System.out.println("You have quit") } 2) 要将“e”转换为整数,请执行以下操作: if(row1 == Integer.ParseInt("e"){

在Java中,我想接受用户输入作为整数或字符串,但无论我做什么,我总是会得到一个错误

我的代码非常简单(我是初学者):

我希望用户也能够按“e”退出

我试过几种方法:

1) 要将行1转换为字符串,请执行以下操作:

    if((String)(row1).equals("e"){
    System.out.println("You have quit") }
2) 要将“e”转换为整数,请执行以下操作:

    if(row1 == Integer.ParseInt("e"){
    System.out.println("You have quit") }
3) 执行switch语句,但它说我有不兼容的类型(
String
int

我的错误通常是:
线程“main”java.util.InputMismatchException中的异常

有人能帮我吗

非常感谢

1)你应该说
Integer.parseInt()
而不是
Integer.parseInt()

2) 如果将“e”传递给
Integer.parseInt()
您将得到
java.lang.NumberFormatException

3) 以
字符串的形式获取您的输入(因为这样更安全)*:


*在您的方法中,如果用户输入一个非整数输入,您将遇到
java.util.InputMismatchException

,您可以尝试以下方法

    Scanner rowInput = new Scanner(System.in);
    String inputStr = rowInput.nextLine();

    try{
        int row1 = Integer.parseInt(inputStr);
    } catch (NumberFormatException e) //If exception occurred it means user has entered 'e'
    {
        if ("e".equals(inputStr)){
            System.out.println("quiting application");
        }
     }
您应该以
String
类型读取扫描仪中的输入,并尝试使用
integer.parseInt()
将该
String
输入转换为整数

如果解析成功,则表示用户输入了一个整数。
如果失败,它将抛出一个异常
NumberFormatException
,它将告诉您它不是整数。因此,您可以继续检查
e
,如果是,请根据您的要求执行任何操作。

您不能将字符串转换为整数,请使用字符ASCII码。如果您不确定输入的数字是否正确,则不能使用
nextInt()
。另外,您不能将
e
解析为整数,因为它不是整数,而是char或string(在本例中,我建议使用string)

这意味着您的代码应该如下所示:

System.out.println("Enter the row number (or enter e to quit the application):");

Scanner rowInput = new Scanner(System.in);
string row1 = rowInput.next();
然后,您就有了字符串中的数据。您只需检查字符串是否为e:

if (row1.Equals("e")) ...
检查输入是否为整数也是一个好主意。这里介绍了检查的好方法:

试试这个:

public class Demo{
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        String choice = null;
        System.out.println("Enter e to exit or some other key to stay:");
        choice=s.next();

        if(choice.equals("e"))
        {
            System.out.println("quits");
            System.exit(0);
        }
        else
        {           
            System.out.println("stays");
        }
    }
}
我试过几种方法

试图通过“尝试”来解决这个问题是错误的做法

正确的方法是了解发生了什么,然后修改您的解决方案以将其考虑在内

问题是,您有一行输入,可以是数字,也可以是表示退出的特殊值
e
。(事实上,这也可能是一些其他的事情……但我会说到这一点。)

当您尝试执行以下任一操作时:

  • 当下一个输入不是整数时,调用Scanner.nextInt()
,或者

  • 对非整数字符串调用
    Integer.parseInt(…)

  • 你会得到一个例外。那你是做什么的

    一种方法是改变你正在做的事情,这样在那些情况下你就不会打那些电话了。例如:

    • 调用
      Scanner.hasInt()
      查看下一个令牌是否为整数,然后再调用
      nextInt()
      ,或者

    • 尝试将字符串转换为整数之前,请先测试
      “e”
      的大小写

    另一种处理方法是捕获异常。例如,您可以这样做:

        String s = ...
        try {
            number = Integer.parseInt(s);
        } catch (NumberFormatException ex) {
            if (s.equals("e")) {
                ...
            }
        }
    
    不管哪种方法都行,但我会让你来解决细节问题

    但我想说的真正的一点是,解决这个问题的正确方法是了解您的原始版本中发生了什么,并根据您的理解,修改您正在做的事情。如果你只是随机地“尝试”你在谷歌上找到的替代方案,你将无法成为一名高效的程序员


    我说还有其他的案子。它们是:

    • 用户键入的内容既不是您的特殊
      e
      字符的数字。它可能是任何东西。空行,
      你好

    • 用户输入“文件结束”字符;e、 g.
      CTRL-D
      在Linux上或
      CTRL-Z
      在windows上


    如果你想让你的程序变得健壮,你也需要处理这些情况。

    为什么不使用字符串row1=rowInput.next()@斯蒂芬同意!!用NFE改性。虽然,我已经用文字解释了它,但没有修改代码。
    public class Demo{
        public static void main(String[] args) {
            Scanner s=new Scanner(System.in);
            String choice = null;
            System.out.println("Enter e to exit or some other key to stay:");
            choice=s.next();
    
            if(choice.equals("e"))
            {
                System.out.println("quits");
                System.exit(0);
            }
            else
            {           
                System.out.println("stays");
            }
        }
    }
    
        String s = ...
        try {
            number = Integer.parseInt(s);
        } catch (NumberFormatException ex) {
            if (s.equals("e")) {
                ...
            }
        }