Java 如何在同一用户输入中接受字符串或整数
在Java中,我想接受用户输入作为整数或字符串,但无论我做什么,我总是会得到一个错误 我的代码非常简单(我是初学者): 我希望用户也能够按“e”退出 我试过几种方法: 1) 要将行1转换为字符串,请执行以下操作: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"){
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.
在Linux上或CTRL-D
在windows上CTRL-Z
如果你想让你的程序变得健壮,你也需要处理这些情况。为什么不使用字符串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")) {
...
}
}