2016-12-27 124 views
1

这是我在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"); 
     } 
+0

你能说出你在str1中获得了什么样的价值吗? – GurV

+0

阅读[Yoda条件](https://en.wikipedia.org/wiki/Yoda_conditions) – Guy

+0

@GurwinderSingh它不会在str1中输入任何内容。 – Mathur

回答

-1

你的问题是你在你的情况下,使用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()来将您收到的字符串转换为小写字母。此外,您可能需要检查明确的肯定答案,因为用户可能会键入狗,并且程序仍然认为它是“是”。

+1

如果只是'if(str1.equalsIgnoreCase(“no”)){}'? –

+0

@YoungMillie虽然没有任何特别的优势,但效果相当好。相同的计算成本。但+1更多的建议。 – Ralph

+0

@YoungMillie不是。 toLowerCase仍然会将每个ASCII字符转换为lowerCase,而即使在编译器级别,equalsIgnoreCase也会执行相同数量的比较。 - >编译器设计课程完成。 – Ralph

3

问题是因为你早些时候选择了nextInt。用户输入一个数字和一个新的行字符。您选择该号码,并且新行字符保持缓冲。当您执行nextLine()时,它会读取所指向的字符与下一个EOL之间的所有字符。它读取空字符串,因为它在\n之前的缓冲区中,然后另一个nextLine()需要程序等待输入。

当您在String str = input.nextLine()后面放置断点时,您会看到它实际上是空的String""

enter image description here

所以不是:

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(); 
+2

这是扫描仪的一个基本错误。应该在每一个很好的教程中解释... – AxelH

+0

为什么不使用'input.next()'?我认为他们正在寻找下一个完整的标记,而不是下一行。 – matt

+0

@matt也许......情况并非如此 – xenteros

相关问题