我是Java新手。我希望得到循环输入,除非用户输入0终止Java中的程序。我知道如何在C ++中实现这一点(如下所示),但是我编写的Java代码不起作用。
C ++:
while (cin >> n, n) {
GraphAdjList G;
CreateAdjListGraph(G, n);
n = 0;
}
Java:
Scanner sc = new Scanner(System. in );
n = sc.nextInt();
while (n != 0) {
Graph G = new Graph();
G.CreateAdjListGraph(n);
//G.print();
n = sc.nextInt();
}
这就是我想要的。该程序仅在用户输入0时终止。
2
qRj dIm
aTy oFu
4
qRj aTy
qRj oFu
oFu cLq
aTy qUr
0
答案 0 :(得分:0)
nextInt()
不适用于您的情况,如果您输入的内容包含非整数词,则会抛出InputMismatchException
。您最好使用nextLine()
,并尝试使用int
将每个单词转换成Integer.parseInt
。
例如:
int n = -1;
Scanner sc = new Scanner(System.in);
String line;
while (n != 0){
line = sc.nextLine();
String[] splits = line.split(" ");
System.out.println(Arrays.toString(splits));
for (String split : splits) {
try {
n = Integer.parseInt(split);
if (n == 0)
break;
//Graph G = new Graph();
//G.CreateAdjListGraph(n);
} catch (NumberFormatException e) {
// handling
}
}
}
即使您在同一行中输入所有输入,这也应该起作用。
答案 1 :(得分:0)
您不应使用scan.nextInt()
,因为在示例程序运行中,您将一些non-inetger values
作为输入,因此,在这种情况下,您的代码将失败。
使用scan.nextLine()
,这会将参数设为String
,而不是Integer
。现在,您可以更改While loop
的比较结果。
工作代码:
import java.util.Scanner;
public class stackScanner
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
String input = scan.nextLine();
// as you are now taking "String" from user so you have to compare it with "0" not 0
while(!(input.equals("0"))) // while input is not 0
{
// your code here
input = scan.nextLine();
}
}
}
注意:我使用的是String.equals()
而不是==
运算符,原因:
String.equals()
始终返回boolean value
,因此不会出现任何异常。==
运算符进行参考比较(地址比较),并使用Stinrg.equals()
方法进行内容比较。简而言之,==
检查两个对象是否都指向相同的内存位置,而String.equals()
则求出对象中值的比较。