如何在Java中从控制台获取字符串输入?
这是我用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
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()我添加的code>基本上在您点击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();