如何在Java中从控制台获取字符串输入?

如何在Java中从控制台获取字符串输入?,java,Java,这是我用Java编写的代码 import java.util.Scanner; class calc { public static void main(String[] args) { boolean go=true; Scanner input=new Scanner(System.in); while(go) { int num1; int num2; int total; int choice

这是我用Java编写的代码

import java.util.Scanner;
class calc
{
public static void main(String[] args)
{
    boolean go=true;
    Scanner input=new Scanner(System.in);
    while(go)
    {
        int num1;
        int num2;
        int total;
        int choice;

        System.out.println("\nHi This is Console type Calculator");
        System.out.println("1. Addition");
        System.out.println("2. Substraction");
        System.out.println("3. Multiply");
        System.out.println("4. Divisoin");
        System.out.print("Enter Your Choice : ");
        choice=input.nextInt();

        switch(choice)
        {

            case 1:
                System.out.println("Enter First Number");
                num1=input.nextInt();
                System.out.println("Enter Second Number");
                num2=input.nextInt();
                total=num1+num2;
                System.out.println("Addition of "+num1+" and "+num2+" are "+total);
                break;
            case 2:
                System.out.println("Enter First Number");
                num1=input.nextInt();
                System.out.println("Enter Second Number");
                num2=input.nextInt();
                total=num1-num2;
                System.out.println("Substraction of "+num1+" and "+num2+" are "+total);
                break;
            case 3:
                System.out.println("Enter First Number");
                num1=input.nextInt();
                System.out.println("Enter Second Number");
                num2=input.nextInt();
                total=num1*num2;
                System.out.println("Multiplication of "+num1+" and "+num2+" are "+total);
                break;
            case 4:
                System.out.println("Enter First Number");
                num1=input.nextInt();
                System.out.println("Enter Second Number");
                num2=input.nextInt();
                total=num1/num2;
                System.out.println("Divistion of "+num1+" and "+num2+" are "+total);
                break;
            default:
                System.out.println("Please Choose right option...Try again");
                break;  
        }

        System.out.println("Do You Want more Calculation...Yes/No");
        String str=input.nextLine();
        System.out.println("Do You Want more Calculation...Yes/No");
        String str1=input.nextLine();

        if("no".equals(str1))
        {
            go=false;
            System.out.println("Thanks For using...Bye");
        }   
    }   
}
}
我在以下代码的输入部分遇到了问题。这不是从用户处获取任何输入跳过此部分。这个代码有什么问题吗

        System.out.println("Do You Want more Calculation...Yes/No");
        String str1=input.nextLine();

        if("no".equals(str1))
        {
            go=false;
            System.out.println("Thanks For using...Bye");
        }   

问题在于您之前选择了
nextInt
。用户输入一个数字和一个新行字符。您拾取数字,新行字符保持缓冲状态。当执行
nextLine()
时,它将读取所指向的内容和下一个
EOL
之间的所有字符。它在
\n
之前读取缓冲区中的空字符串,然后另一个
nextLine()
要求程序等待输入

当您在
String str=input.nextLine()
之后放置断点时,您将看到它实际上是空的
String
“”

因此,不是:

    System.out.println("Do You Want more Calculation...Yes/No");
    String str=input.nextLine();
    System.out.println("Do You Want more Calculation...Yes/No");
    String str1=input.nextLine();
你应该写:

    input.nextLine();
    System.out.println("Do You Want more Calculation...Yes/No");
    String str1=input.nextLine();

您的问题是在您的案例中使用了
nextInt()
,因此存储的字符串是新行。您只需更换:

    System.out.println("Do You Want more Calculation...Yes/No");
    String str1=input.nextLine();

    if("no".equals(str1))
    {
        go=false;
        System.out.println("Thanks For using...Bye");
    }   
作者:

您可以删除以下内容,因为这两行没有任何用处:

    System.out.println("Do You Want more Calculation...Yes/No");
    String str=input.nextLine();
说明:
input.nextLine()基本上在您点击enter或return时捕获新行字符。接下来,您必须再次调用
input.nextLine()
,并将其分配给
str1
,以捕获要使用的字符串。
另外,在您的程序上还有一个小提示:如果用户输入No,您的程序仍然认为该值为Yes,因为只有当No为小写时,它才会变为false。一个解决方案是通过调用
str1.toLowerCase()
将收到的字符串转换为小写。此外,您可能需要检查是否有明确的“是”答案,因为用户可能键入dog,而您的程序仍将其视为“是”。

您能告诉我们str1中的值吗?请阅读@gurvindersingh,它不接受str1中的任何输入。您可能需要尝试使用
扫描仪。下一步
,使用
if(str1.equalsIgnoreCase(“no”){}
代替
if(“no”).equals(str1))
这是扫描仪的一个基本错误。应该在每一个好的教程中解释…为什么不使用,
input.next()
?我想他们在寻找下一个完整的代币,而不是下一行。@matt也许。。。不是这样的,如果(str1.equalsIgnoreCase(“no”){}
?@YoungMillie同样有效,但没有任何特殊优势。同样的计算成本。但是+1有更多的建议。@YoungMillie不是真的。toLowerCase仍然会将每个ASCII字符转换为小写,而equalsIgnoreCase即使在编译器级别也会执行相同数量的比较。-->完成编译器设计课程。
    System.out.println("Do You Want more Calculation...Yes/No");
    String str=input.nextLine();