2013-07-08 109 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); 
     } 
     }