2013-09-29 58 views
0

我剛開始的Java,並試圖編寫一個簡單的計算器:初學者嘗試編寫一個簡單的計算器

我試過如下:

double x, y; //inputs 
    Scanner sc = new Scanner(System.in); 
    System.out.println("x?"); 
    x = sc.nextDouble(); 
    System.out.println("y?"); 
    y = sc.nextDouble(); 

    double answer = 0; 

    System.out.println("Operation type: (+,-,*,/)"); 


    String opStr= sc.nextLine(); 
    char op = opStr.charAt(0); 


    switch(op) 
    { 
     case '+': 
      answer=x+y; 
      break; 

     case '-': 
      answer=x-y; 
      break; 

     case '*': 
      answer=x*y; 
      break; 

     case '/': 

      if (y==0) 
      { 
       System.out.println("Error, can't divide by zero"); 
      } 
      else 
      { 
       answer=x/y; 
      } 

      break; 
     default: System.out.println("Unkown operation"); 
    } // switch end 

    System.out.println("answer = " +x+op+y+"=" + answer); 

當我嘗試運行它,我得到以下幾點: (我可以輸入x和y,但後來我得到的錯誤信息。

Operation type: (+,-,*,/) 
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0 
    at java.lang.String.charAt(String.java:686) 
    at edf_1.EDF_1.main(EDF_1.java:170) 
Java Result: 1 
BUILD SUCCESSFUL (total time: 3 seconds) 

會很感激,如果有人能幫助我發現其中的錯誤或問題!

感謝

NAC

+2

您是否在使用'x'和'y'後清空緩衝區?如果不是,'nextLine()'會爲你做這件事,而一條空行將被分配給'opStr',所以'charAt(0)'會觸發一個異常。 – BackSlash

+0

另請參閱:http://stackoverflow.com/questions/18163518/while-loop-executes-only-once/18163608#18163608 – Nayuki

+0

另外,從#開始:String result =「Answer =」+ x +「」+ op + 「」+ y +「=」+ answer; System.out.println(result);' – BlackBox

回答

8

nextDouble()處理行的末尾。因此,當您再次撥打nextLine()時,它會以您輸入的輸入\n)作爲輸入。所以它跳過了實際的輸入並且吞下了以前的輸入\n,這是nextLine()錯過的。您應該在真正的nextLine()之前撥打另一個nextLine()(因此它將吞下\n)。

如果你不想這樣做,你應該構造另一個Scanner而不是使用同一個對象。

這就是您的原因StringIndexOutOfBoundsExceptionopStr在這一點上只是一個\n

0

問題是,在讀取double之後,掃描儀輸入不是空的。因此,調用nextLine()會立即返回,並將不可解析的最後一個輸入的部分作爲浮點值(可能爲空)返回。如果您在請求操作前調用sc.nextLine(),則下一次調用sc.nextLine()會讀取包含您的操作的行。

0

當我開始學習java時,我構建了世界上最簡單的計算器。這應該適合你:

import java.util.Scanner; 
public class CalculatorProgram { 
Scanner scan = new Scanner(System.in); 
int N1; 
int N2; 
int O = 0; 
System.out.println("Enter the first number:"); 
N1 = scan.nextInt(); 
System.out.println("Enter the second number:"); 
N2 = scan.nextInt(); 
System.out.println("Press 1 for addition, 2 for subtraction, 3 for multiplication, 4 for  division 
O=scan.nextInt(); 
switch (O){ 
case 1: 
O=N1+N2; 
System.out.println(O); 
break; 
case 2: 
O=N1-N2; 
System.out.println(O); 
break; 
case 3: 
O=N1*N2; 
System.out.println(O); 
break; 
case 4: 
O=N1/N2; 
System.out.println(O); 
break; 

default: 
System.out.println("That is an invalid selection. Thank you for using this program."); 
break; 

} 
} 

} 

你很受歡迎。