2013-06-01 17 views
8

To jest moja druga klasa programistyczna i jestem nowy w Javie. Pracowałem nad moim pierwszym zadaniem i obejmuje ono zajęcia i metody. Niewiele wiem o tych tematach i czuję się zagubiony. Moje zadanie prosi mnie o stworzenie kalkulatora RPN, który prosi użytkownika o dwie liczby i operatora. Kalkulator wykonuje operację na tych dwóch liczbach i prosi o jeszcze jedną liczbę i jeszcze jednego operatora. Kalkulator następnie wykorzystuje wynik z pierwszego zestawu i wykonuje inną operację z nowo wprowadzonym numerem. Program kończy się, gdy użytkownik wprowadzi literę. Załączam mój kod (surowy). Potrzebuję tyle pomocy w zrozumieniu metod, jak w przypadku kodowania. Proszę pomóż jak najszybciej, chcę się tego nauczyć. Każda pomoc jest doceniana.RPNCalculator Code Confusion

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

Na czym polega problem? – arynaq

+0

Otrzymuję 4 błędy informujące, że kompilator nie może znaleźć symbolu. Jest dołączone. Nie mam pojęcia, czy robię to poprawnie i czy da mi to wyniki, których szukam. Czy powinienem utworzyć osobny plik java z opisem klasy? Ponownie jestem nowy w programowaniu. RPNCalc.java:25: błąd: nie można znaleźć symbolu \t \t \t \t sum.writeOutput(); \t \t \t \t^ – Charla

+1

Co to jest 'sum.writeOutput();'? Jedyną zdefiniowaną przeze mnie "sumą" jest funkcja, a funkcje nie mogą mieć członków, i nie widzę zdefiniowanej gdziekolwiek funkcji 'writeOutput()', więc są to dwa błędy. – Patashu

Odpowiedz

1

OK. No to ruszamy. Zmieniłem trochę twój program. Oto problemy, które pojawiły się podczas modyfikowania programu. 1. W żadnej z klas nie było metody "writeOutput()", dlatego musiałem usunąć ten fragment kodu: 2. Musiałem wprowadzić pętlę while, aby uczynić to procesem iteracyjnym 3. przesunąć w dół operatora Metoda .charAt (0) po przeczytaniu łańcucha operatora:

Ponieważ używasz instrukcji switch, nie możesz porównać wartości operatora z wartością ciągu "nCr". Aby użyć tego, będziesz musiał użyć porównania String używając metoda equals():

Ostatnim, ale nie najmniej ważnym rezultatem operacji powinno być jedno z wejść do następnej rundy obliczeń, co oznacza, że ​​wynik pierwszej operacji zostanie przekazany do pierwszego parametru następnej operacji.

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

Chociaż wymyśliłem to z pomocą tutora, doceniam twoją pomoc. To było bardzo łatwe do zrozumienia. Dzięki jeszcze raz. – Charla

0

Traktujesz swoje nazwy funkcji tak, jakby były obiektami jakiejś klasy. Czy to się kompiluje?

Chcesz wyjść z programu, gdy użytkownik wpisze "q".

Zaczynasz od przeczytania operatora na początku. Czemu?

Musisz zamknąć główną część programu w pętli.

będę pisać kilka wierszy dla Ciebie, ale większość zmian pozostawiono jako ćwiczenie dla ciebie

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

Żaden plik się nie skompilował, otrzymałem 4-bity wszystkie stwierdzające RPNCalc.java:25: błąd: nie można znaleźć symbolu \t \t \t sum.writeOutput(); \t \t \t \t^ symbol: zmienna suma lokalizacja: Klasa rpncalc \t \t \t \t^ – Charla

+0

Niestety nie skończyć oświadczenie. Pierwotnie miałem zupełnie inny program, który został zamknięty w instrukcji do wykonania, ale został poinstruowany, żeby to zmienić. – Charla