2013-06-01 151 views
8

這是我的第二個編程類,我是Java新手。我一直在做我的第一個任務,它涉及到類和方法。我對這些話題知之甚少,發現自己迷失了方向。我的任務要求我創建一個RPN計算器,要求用戶輸入兩個數字和一個操作員。計算器對這兩個數字執行操作,並要求多一個數字和另一個操作符。然後計算器使用第一組的結果並用剛剛輸入的新數字執行另一個操作。該程序在用戶輸入信件時結束。我附上我的代碼(原油)。我需要像編碼一樣幫助理解方法。請儘快幫助,我想學習這一點。任何幫助表示讚賞。RPNCalculator代碼混淆

import java.util.Scanner; 

public class RPNCalc 
{ 
    public static void main(String[]args) 
    { 
     Scanner keyboard = new Scanner(System.in); 

     double v1, v2; 
     String operator = keyboard.nextLine(); 
     char symbol = operator.charAt(0); 

     System.out.print("Enter a value v1: "); 
     v1 = keyboard.nextDouble(); 
     System.out.println(); 
     System.out.print("Enter a value v2: "); 
     v2 = keyboard.nextDouble(); 
     System.out.println(); 
     System.out.print("Enter one of the valid operators +, -, *, /, nCr,: "); 
     operator = keyboard.nextLine(); 
     switch (symbol) 
      { 
      case'+': 
       sum.writeOutput(); 
       break; 
      case'-': 
       minus.writeOutput(); 
       break; 
      case'*': 
       times.writeOutput(); 
       break; 
      case'/': 
       divide.writeOutput(); 
       break; 
      case'q': 
       System.out.println("Your last result was " ); 
      default: 
       System.out.println("You must choose an appropriate operator ."); 
      } 
    } 

    double value1, value2; 
    int n; 

    public static double sum(double value1,double value2) 
    { 
     double newSum = value1 + value2; 
     return newSum; 
    } 
    public static double minus(double value1, double value2) 
    { 
     double newMinus = value1 - value2; 
     return newMinus; 
    } 
    public static double times(double value1, double value2) 
    { 
     double newTimes = value1 * value2; 
     return newTimes; 
    } 
    public static double divide(double value1, double value2) 
    { 
     double newDivide = value1/value2; 
     return newDivide; 
    } 
} 
+0

什麼問題? – arynaq

+0

我收到4個錯誤,指出編譯器找不到符號。它被附上。我不知道我是否正確地做了這件事,如果它能給我我想要的結果。我應該創建一個具有類描述的單獨的java文件嗎?再次,我是編程新手。 RPNCalc.java:25:錯誤:找不到符號 \t \t \t \t sum.writeOutput(); \t \t \t \t^ – Charla

+1

什麼是'sum.writeOutput();'?我看到的唯一'sum'是一個函數,函數不能有成員,並且我沒有看到在任何地方定義的'writeOutput()'函數,所以這是兩個錯誤。 – Patashu

回答

1

確定。開始了。我已經修改了一下你的程序。以下是修改程序時出現的問題。 1.沒有任何類中的writeOutput()方法,因此我必須刪除那段代碼 2.必須引入一個while循環來使其成爲一個迭代過程 3.向下移動操作符我們在讀取運算符字符串之後使用.charAt(0)方法

由於您使用的是switch語句,因此無法將運算符值與「nCr」字符串值進行比較,要使用此值,必須使用字符串比較()方法

最後但並非最不重要的一點,操作的結果應該是下一輪計算的輸入之一,意味着第一個操作的結果將被傳遞到下一個操作的第一個參數。

import java.util.Scanner; 

public class RPNCalc 
{ 
    public static void main(String[]args) 
    { 
     Scanner keyboard = new Scanner(System.in); 

     double v1, v2; 
//  String operator = keyboard.nextLine(); 
//  char symbol = operator.charAt(0); 
     char operator = ' ';//First time around, set this to an something other than 'q' 
     String operatorString = " "; 
     System.out.print("Enter a value v1: "); 
     v1 = keyboard.nextDouble(); 
     System.out.println(); 
     while(operator != 'q') 
     { 
      System.out.print("Enter a value v2: "); 
      v2 = keyboard.nextDouble(); 
      System.out.println(); 
      System.out.print("Enter one of the valid operators +, -, *, /, nCr,: "); 
      operatorString = keyboard.next();//nextLine() doesn't wait until the user hit enter 
      operator = operatorString.charAt(0); 
      switch (operator) 
      { 
      case'+': 
       v1 = sum(v1, v2); 
       System.out.println(v1); 
       break; 
      case'-': 
       v1 = minus(v1, v2); 
       System.out.println(v1); 
       break; 
      case'*': 
       v1 = times(v1, v2); 
       System.out.println(v1); 
       break; 
      case'/': 
       v1 = divide(v1, v2); 
       System.out.println(v1); 
       break; 
      case'q': 
       System.out.println("Your last result was " );     
      default: 
       System.out.println("You must choose an appropriate operator ."); 
      } 
     } 
    } 

    double value1, value2; 
    int n; 

    public static double sum(double value1,double value2) 
    { 
     double newSum = value1 + value2; 
     return newSum; 
    } 
    public static double minus(double value1, double value2) 
    { 
     double newMinus = value1 - value2; 
     return newMinus; 
    } 
    public static double times(double value1, double value2) 
    { 
     double newTimes = value1 * value2; 
     return newTimes; 
    } 

    public static double divide(double value1, double value2) 
    { 
     if (value2 == 0) 
     { 
      System.out.println("Division by Zero. Try again"); 
      return value1; 
     } 
     double newDivide = value1/value2; 
     return newDivide; 
    } 
} 
+0

雖然我和導師想出了這一點,但我感謝你的幫助。這很容易理解。再次感謝。 – Charla

0

你正在把你的函數名看作是某些類的對象。這甚至編譯?

您想在用戶輸入'q'時退出程序。

您從開始時閱讀操作員開始。爲什麼?

您需要將程序的主體封裝在循環中。

我會寫了幾行字給你,但變化的大部分是作爲一個練習對你

double result; 
System.out.print("Enter the first value"); 
result = keyboard.nextDouble(); 
boolean done = false; 

while (!done) { 
    System.out.println("Enter a value"); 
    v1 = keyboard.nextDouble(); 
    System.out.print("Enter one of the valid operators +, -, *, /, nCr,: "); 
    operator = keyboard.nextLine(); 
    symbol = operator.charAt(0); 
    switch (symbol) { 
     case '+': 
     result = sum(result, v1); 
     break; 
     ... 
     case 'q': 
     System.out.println("Your last result was " + result); 
     done = true; 
     break; 
    } 
} 
+0

沒有文件沒有編制,我收到4errors所有陳述RPNCalc.java:25:錯誤:無法找到符號 \t \t \t \t sum.writeOutput(); \t \t \t \t^ 符號:變量和 位置:類RPNCalc \t \t \t \t^ – Charla

+0

對不起,我沒有完成我的發言。我原本有一個完全不同的程序,它被封裝在do while語句中,但被指示改變它。 – Charla