如何在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;
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()
,存储,以便您的字符串是新线。所有你需要做的就是更换:
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");
input.nextLine(); // this is what I added
String str1=input.nextLine();
if("no".equals(str1))
{
go=false;
System.out.println("Thanks For using...Bye");
}
您可以删除以下那些2线还是没有的好:
System.out.println("Do You Want more Calculation...Yes/No");
String str=input.nextLine();
说明:input.nextLine();
那我添加基本上捕获新行字符时,你输入或返回。接下来,您将不得不再次拨打input.nextLine()
并将其分配给str1
以捕获您打算使用的字符串。 此外,您的程序中还有一个小记录:如果用户输入“否”,程序仍将该值视为“是”,因为只有“小写”不变,该值才会更改为false。解决方案是通过调用str1.toLowerCase()
来将您收到的字符串转换为小写字母。此外,您可能需要检查明确的肯定答案,因为用户可能会键入狗,并且程序仍然认为它是“是”。
答
问题是因为你早些时候选择了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();
你能说出你在str1中获得了什么样的价值吗? – GurV
阅读[Yoda条件](https://en.wikipedia.org/wiki/Yoda_conditions) – Guy
@GurwinderSingh它不会在str1中输入任何内容。 – Mathur