2013-07-08 90 views
0

所以我试图测试一个基本的计算器,但程序在它要求“加,减,乘或除”后才结束 - 它不给用户输入的机会。请帮助赞赏:)谢谢!基本计算器错误

import java.util.Scanner; 
public class Lator { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     float num1; 
     float num2; 
     String choice; 

     Scanner imput = new Scanner(System.in); 

     System.out.println("This is a calculator."); 
     System.out.println("Enter your first number."); 
     num1 = imput.nextFloat(); 

     System.out.println("Enter your second number."); 
     num2 = imput.nextFloat(); 

     System.out.println("Would you like to add, subtract, divide, or multiply?"); 
     choice = imput.nextLine(); 

     if(choice.equals("Add")||choice.equals("+")||choice.equals("Addition")) { 
     System.out.println("Number1 " + num1 + " + " + "number2" + num2 + "=" + (num1 + num2)); 

     } 
    } 
} 
+7

这个词是'input'。此外,错误可能是因为您在输入时在每个“nextFloat”后输入了新行字符。 –

+3

@Sotiros - Java允许你选择你的变量名称。请专注于回答问题。 (无论如何,在英文中,输入是输入的完美拼写变体。) –

+1

@SualehFatehi'输入'不是英文单词。 –

回答

3

使用下面的代码。代码中的注释解释了答案。

import java.util.Scanner; 

    public class Lator { 

     public static void main(String[] args) { 
      float num1; 
      float num2; 
      String choice; 

      Scanner imput = new Scanner(System.in); 

      System.out.println("This is a calculator."); 
      System.out.println("Enter your first number."); 
      num1 = imput.nextFloat(); 

      System.out.println("Enter your second number."); 
      num2 = imput.nextFloat(); 

      imput.nextLine(); //ADDED LINE 

      System.out.println("Would you like to add, subtract, divide, or multiply?"); 
      choice = imput.nextLine(); 

      if(choice.equals("Add")||choice.equals("+")||choice.equals("Addition")) { 
      System.out.println("Number1 " + num1 + " + " + "number2" + num2 + "=" + (num1 + num2)); 

      } 
     } 
    } 

我们增加imput.nextLine();因为imput.nextFloat();离开,我们需要扫描用户的选择之前,清除遗留下来的换行字符。

当用户输入“添加”时,它将这个新行字符作为选择。让我知道这是如何解决你的。看到这里一个类似的答案,Java For Loop Issue

-Henry

+0

这也适用,我更喜欢我的例子,因为它使用较少的代码。 –

0

更改以下行:

choice = imput.nextLine(); 

到:

choice = imput.next(); 

这是什么存储用户在字符串 '选择' 写入。

您可以通过添加此作为下一行测试:

System.out.println(choice); 

编辑:这将只能得到下一个单词。按照意见,如果你要扩大你的应用程序来处理像平方根或类似的东西输入,你会想要去到下一行第一:

imput.nextLine(); 
System.out.println("Would you like to add, subtract, divide, or multiply?"); 
choice = imput.nextLine(); 

原因需要去到下一行扫描仪'输入'仍然在前一行,就在用户输入第二个浮点数之后。

我认为,你的应用程序的最佳选择是使用虽然我的第一个例子,用imput.next();因为你的应用程序只使用一个字的输入。使用imput.nextLine();可能会扩大输入错误的可能性,因为它会得到整条线。

+0

谢谢,这工作。 :)为什么会.nextLine();虽然没有工作,我想.nextLine();会适用于所有的字符串?再次感谢 –

+1

@GhettoMan我解释了为什么它不起作用。 –

+0

@GhettoMan我改变了我的答案以反映这个问题,亨利哈里斯的答案以这种方式工作。取决于应用程序的需求,由您决定使用哪一个。 –

0

不要的问题,但只是一个观察相关(除非这是当然的简化版本!)即我误解了问题

该计划中的最后一次next..()电话后会刚刚结束,因为它计算它需要什么然后在程序结束时退出。

添加的东西 '暂停' 的程序的执行,如

// After calculating 
System.out.println("Press any key to continue"); 
imput.next(); 
// continue with what you want. 
+2

...这与他的问题有什么关系? – chancea

+0

好点,将该问题误读为“程序在选择要执行的操作后退出”。 –

0

,你可以使用此代码

import java.util.Scanner; 
public class Lator { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     float num1; 
     float num2; 
     String choice; 

     Scanner imput = new Scanner(System.in); 

     System.out.println("This is a calculator."); 
     System.out.println("Enter your first number."); 
     num1 = imput.nextFloat(); 

     System.out.println("Enter your second number."); 
     num2 = imput.nextFloat(); 

     System.out.println("Would you like to add, subtract, divide, or multiply?"); 
     choice = imput.next(); 

     if(choice.equals("Add")||choice.equals("+")||choice.equals("Addition")) { 
     System.out.println("Number1 " + num1 + " + " + "number2 " + num2 + " = " + (num1 + num2)); 

     } 
    } 
} 

使用choice.equalsIgnoreCase("add")而不是choice.equals("Add")

0
import java.util.*; 
class Calculate 
{public static void main(String args[]) 
{int a,b,choice; 
Scanner sc=new Scanner(System.in); 
    System.out.println("enter numbers"); 
    a=sc.nextInt(); 
    b-sc.nextInt() 
    System.out.print("1.add\n2.sub\n3.mul\n4.div\n5.mod"); 
    System.out.println("enter choice"); 
    choice=sc.nextInt(); 
do 
{ 
switch(choice) 
{case 1:System.out.println("result is" +(a+b)); 
    break; 
case 2:System.out.println("result is" +(a-b)); 
    break; 
case 3:System.out.println("result is" +(a*b)); 
    break; 
case 4:if(a>b) 
    { System.out.println("result is" +(a/b)); 
    break;} 
    else { System.out.println("invalid"); 
    break;} 
case 5:System.out.println("result is" +(a%b)); 
    break; 
    default: System.out.println("invalid"); 
    break; 
     } 
     } 
     while(choice!=6); 
     } 
     }