如何在Java中输入时获得提示(用户输入0终止程序时除外)?

时间:2019-03-23 07:47:57

标签: java

我是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

2 个答案:

答案 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()则求出对象中值的比较。

For more on String.equals()