Java .equals()方法似乎不适合我
我需要打印“输入数字”或“X”以关闭并获得用户输入。我需要它来检测输入是字符串还是int。我将输入设为字符串,然后解析int,但是.equals方法没有检测它是否是X,b/c如果我输入任何其他字母或字符串,它将终止它,我希望它仅以X或X终止 我的朋友告诉我尝试一个switch语句,但idk id如何做,我已经尝试解析一个字符串Java .equals()方法似乎不适合我,java,string,Java,String,我需要打印“输入数字”或“X”以关闭并获得用户输入。我需要它来检测输入是字符串还是int。我将输入设为字符串,然后解析int,但是.equals方法没有检测它是否是X,b/c如果我输入任何其他字母或字符串,它将终止它,我希望它仅以X或X终止 我的朋友告诉我尝试一个switch语句,但idk id如何做,我已经尝试解析一个字符串 while(input.hasNextInt()){ String x = input.nextLine(); if ("x"
while(input.hasNextInt()){
String x = input.nextLine();
if ("x".equals("Exit")||x.equals("x")) {
System.out.print("Exiting...");
System.exit(0);
}
numbers.add(Integer.parseInt(x));
Collections.sort(numbers);
for (int i=0; i < numbers.size(); i++) {
System.out.print(numbers.get(i)+" ");
}
输入数字或X以关闭:4
4.
平均值:4.0,中位数:4,这是你的最小值:4,这是你的最大值:4
输入编号:q
^当我输入任何其他字母或字符串时,它终止
while(input.hasNextInt())
如果输入x或任何其他非数字,hasNextInt将返回false,while循环结束。您的代码不接受字符串输入,因为您的while条件只接受int值
while(input.hasNextInt())
你可以试着把它改成-
while(input.hasNext()){
}
如果条件如下,您也可以尝试更改-
if(x.equalsIgnoreCase("x")){
// your code here
}
若你们想同时退出程序以退出,你们可以把它添加到条件中-
if(x.equalsIgnoreCase("x") || x.equalsIgnoreCase("exit"){
// your code here
}
让它工作,这是while循环这不是equals方法的问题。您应该使用input.hasNext而不是input.hasNextInt 检查字符串而不是变量是否相等也是一个好主意。 试试这个
提示:如果使用Java 7或更高版本,请始终初始化try块内的资源,如果知道何时关闭,请显式关闭它。我使您的代码也能正常工作:
Scanner input = new Scanner(System.in);
List<Integer> numbers = new ArrayList<>();
while (true) {
String x = input.nextLine();
if (x.equals("Exit") || x.equals("x")) {
numbers.stream().sorted().forEach(
(number) -> System.out.print(number + " "));
System.out.print("Exiting...");
System.exit(0);
}
try { // If the entered value isn't a number.
numbers.add(Integer.parseInt(x));
} catch (NumberFormatException e) {
System.out.println("The next value : " + x + "isn't a number. It wasn't added in the list");
}
}
然后,如果在应用程序运行时在终端中输入以下内容,则显示结果:
进入11 22 33和退出的第一个病例:
十一,
22
33
退出=>
11 22 33退出
第二种情况下只有x,没有其他:
x=>
退出
值不正确的aa:
十一,
22
aa
下一个值:aa不是数字。它没有被添加到列表中
33
x=>
11 22 33退出
x、 equalsExit将始终为false。这听起来是开始学习的好时机。很可能,x不是你想象的那样,甚至不是你想象中的那样。数字是什么?我调试程序,它将我带到一个名为Premain$1的堆栈。transformClassLoader,String,Class,ProtectionDomain,byte[]行:45.hasNextLine?输入数字或X以关闭:退出退出主线程java.lang.NumberFormatException中的异常:对于输入字符串:退出java.lang.NumberFormatException.forInputStringUnknown源于java.lang.Integer.parseIntUnknown源于java.lang.Integer.parseIntUnknown源于idkm8.Statistics.getStatistics.java:21 atidkm8.Main.mainMain.java:10@CalebFoster对于输入字符串:退出。如果按照问题注释中的建议将x.equalsExit更改为x.equalsExit,则不应访问parseInt。关闭链接到System.in的扫描仪可能会关闭System.in,这是错误的。如果您没有打开资源,请不要关闭它。检查字符串而不是变量是否相等也是一个好主意-奇怪,为什么?@Fureeish如果变量为null,我们将得到一个NullPointerException。这有时可能是相关的,但我还不认为这是一个通用的准则。@Fureeish true。因此,这是一个好主意,而不是你必须始终坚持
try (Scanner input = new Scanner(System.in)) {
List<Integer> numbers = new ArrayList<Integer>();
while (input.hasNext()) {
String x = input.nextLine();
if ("Exit".equals(x) || "x".equals(x)) {
System.out.print("Exiting...");
input.close();
System.exit(0);
}
numbers.add(Integer.parseInt(x));
Collections.sort(numbers);
for (int i = 0; i < numbers.size(); i++) {
System.out.print(numbers.get(i) + " ");
}
}
}
Scanner input = new Scanner(System.in);
List<Integer> numbers = new ArrayList<>();
while (true) {
String x = input.nextLine();
if (x.equals("Exit") || x.equals("x")) {
numbers.stream().sorted().forEach(
(number) -> System.out.print(number + " "));
System.out.print("Exiting...");
System.exit(0);
}
try { // If the entered value isn't a number.
numbers.add(Integer.parseInt(x));
} catch (NumberFormatException e) {
System.out.println("The next value : " + x + "isn't a number. It wasn't added in the list");
}
}