2010-04-29 6 views
1

Во-первых, это не вопрос домашней работы. Я практикую свои знания по java. Я решил, что хороший способ сделать это - написать простую программу без посторонней помощи. К сожалению, мой компилятор говорит мне об ошибках, я не знаю, как это исправить. Не изменяя много логики и кода, может ли кто-нибудь указать, где некоторые из моих ошибок? БлагодаряПростой калькулятор Java

import java.lang.*; 
import java.util.*; 

public class Calculator 
{ 
    private int solution; 
    private int x; 
    private int y; 
    private char operators; 

    public Calculator() 
    { 
     solution = 0; 
     Scanner operators = new Scanner(System.in); 
     Scanner operands = new Scanner(System.in); 
    } 

    public int addition(int x, int y) 
    { 
     return x + y; 
    } 
    public int subtraction(int x, int y) 
    { 
     return x - y; 
    } 
    public int multiplication(int x, int y) 
    {  
     return x * y; 
    } 
    public int division(int x, int y) 
    { 
     solution = x/y; 
     return solution; 
    } 
    public void main (String[] args) 
    { 
     System.out.println("What operation? ('+', '-', '*', '/')"); 

     System.out.println("Insert 2 numbers to be subtracted"); 
     System.out.println("operand 1: "); 
     x = operands; 
     System.out.println("operand 2: "); 
     y = operands.next(); 
     switch(operators) 
     { 
      case('+'): 
      addition(operands); 
      operands.next(); 
      break; 
      case('-'): 
      subtraction(operands); 
      operands.next(); 
      break; 
      case('*'): 
      multiplication(operands); 
      operands.next(); 
      break; 
      case('/'): 
      division(operands); 
      operands.next(); 
      break; 
     } 
    } 
} 
+3

Какие ошибки вы получаете? –

+2

Спасибо, что разместили свой код. Тем не менее, это также помогает много, когда вы публикуете текст сообщений об ошибках, которые вы получаете от компилятора, - это облегчает людям быстрое выявление проблемы (без необходимости читать весь код или компилировать его самостоятельно). –

ответ

3
package org.com; 

import java.lang.*; 
import java.util.*; 

public class Calculator 
{ 
    private int solution; 
    private static int x; 
    private static int y; 
    private char operators; 

    public Calculator() 
    { 
     solution = 0; 
     Scanner operators = new Scanner(System.in); 
     Scanner operands = new Scanner(System.in); 
    } 

    public int addition(int x, int y) 
    { 
     return x + y; 
    } 
    public int subtraction(int x, int y) 
    { 
     return x - y; 
    } 
    public int multiplication(int x, int y) 
    {  
     return x * y; 
    } 
    public int division(int x, int y) 
    { 
     solution = x/y; 
     return solution; 
    } 

    public void calc(int ops){ 
     x = 4; 
     System.out.println("operand 2: "); 
     y = 5; 

     switch(ops) 
     { 
      case(1): 
       System.out.println(addition(x, y)); 

      // operands.next(); 
       break; 
      case(2): 
       System.out.println(subtraction(x, y)); 
       // operands.next(); 
       break; 
      case(3): 
       System.out.println(multiplication(x, y)); 
      // operands.next(); 
       break; 
      case(4): 
       System.out.println(division(x, y)); 
      // operands.next(); 
       break; 
      } 
    } 
    public static void main (String[] args) 
    { 
     System.out.println("What operation? ('+', '-', '*', '/')"); 
     System.out.println(" Enter 1 for Addition"); 
     System.out.println(" Enter 2 for Subtraction"); 
     System.out.println(" Enter 3 for Multiplication"); 
     System.out.println(" Enter 4 for Division"); 

     Calculator calc = new Calculator(); 
     calc.calc(1); 


    } 
} 

Это будет работать

4

operands и operators выходят за рамки для основной. Вы объявляете локальные переменные в конструкторе, поэтому, когда вы выходите из ctor, они имеют право на GC и уходят.

У вас есть ошибки компиляции - 10 из них.

+0

Вы предложили бы их использовать в основном: this.operands; this.operators; или это для другой цели? – dukevin

+0

@Kevin Duke: вы не можете добавлять поля в класс во время выполнения на этом языке. Вам нужно будет указать их в калькуляторе, как вы указали решение и операторы. У главного также нет «этого», поскольку он должен быть статичным. –

0

Ваш главный метод должен быть объявлен как это:

public static void main(String[] args) {..} 

Кроме того, кажется, что вы только поставляет один аргумент для ваших всех арифметических методов (сложение, вычитание и т.д.), хотя они требуют два.

public int addition(int x, int y); 

Не может быть вызвана с addition(operands), то есть только один аргумент, и аргумент неправильного типа (метод нуждается в двух int, вы даете ему Scanner). То же самое касается всех этих методов. Вам необходимо извлечь int s из Scanner. Вы можете сделать это с помощью Scanner.nextInt().

2

Другой проблемой является, линия

y = operands.next(); 

пытается поместить String вернулся из Scanner.next() в переменной y который объявлен как тип int.

Метод Scanner.nextInt() можно использовать, чтобы попытаться вернуть int.

1

В дополнение к другим ответам ваш метод main() должен быть статическим, чтобы быть точкой входа в программу. В main() вам нужно будет создать свой собственный объект Calculator и вызвать на нем методы.

-2

Как раз как правило, не рекомендуется начинать бросать

import java.util.*;
в вашу программу, потому что это делает программу излишне большой и медленной. Все, что вам нужно для этого, это
import java.util.Scanner;
Если я прав, большинство, если не все в java.lang уже импортировано для вас.

+2

Это неправильно. Импорт пакетов подстановочных знаков не влияет на производительность выполнения (или размер вашей программы, если на то пошло). Он используется только для разрешения символа времени компиляции. –

2
package com.abc; 

import java.util.Scanner; 

public class Calculator { 
    private static final String pos = "+"; 
    private static final String neg = "-"; 
    private static final String mult = "*"; 
    private static final String div = "/"; 

    private enum operation { 
     pos, neg, mult, div 
    }; 
    private int solution; 
    private int x; 
    public int getX() { 
     return x; 
    } 

    public void setX(int x) { 
     this.x = x; 
    } 

    public int getY() { 
     return y; 
    } 

    public void setY(int y) { 
     this.y = y; 
    } 

    private int y; 



    static Scanner operators; 

    public Calculator() { 
     solution = 0; 
     operators = new Scanner(System.in); 

    } 

    public int addition(int x, int y) { 
     return x + y; 
    } 

    public int subtraction(int x, int y) { 
     return x - y; 
    } 

    public int multiplication(int x, int y) { 
     return x * y; 
    } 

    public int division(int x, int y) { 
     solution = x/y; 
     return solution; 
    } 

    public static void main(String[] args) { 
     Calculator calc = new Calculator(); 

     System.out.println("Insert 2 numbers"); 

     System.out.println("operand 1: "); 

     calc.setX(Integer.parseInt(operators.next())); 

     System.out.println("operand 2: "); 
     calc.setY(Integer.parseInt(operators.next())); 

     System.out.println("What operation? ('pos', 'neg', 'mult', 'div')"); 
     operation ttt = operation.valueOf(operators.next()); 
     int output = 0 ; 
     switch(ttt){ 
     case pos: 
      output = calc.addition(calc.getX(), calc.getY()); 

      break; 
      case neg: 
       output = calc.subtraction(calc.getX(), calc.getY()); 

      break; 
      case mult: 
       output = calc.multiplication(calc.getX(), calc.getY()); 

      break; 
      case div: 
       output = calc.division(calc.getX(), calc.getY()); 

      break; 
     } 
     System.out.println("output ="+output); 
    } 
} 
1

Это все здорово, но какую программу вы используете, чтобы написать Java? Возможно, вам стоит использовать IDE, например Eclipse, так как он может автоматически обнаруживать ошибки, а также добавлять импорт. (Я не уверен, что ваш делает это). Он также сообщает вам, что проблема с вашей программой «на английском». Кроме того, рассмотрим этот класс как может быть проще и менее сложный способ сделать калькулятор:

public class Calculator { 
public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    System.out.print("Enter an Operator: "); 
    String in = sc.next(); 
    char oper = in.charAt(0); 

    System.out.print("Enter a number: "); 
    in = sc.next(); 
    double num1 = Double.parseDouble(in); 

    System.out.print("Enter another number: "); 
    in = sc.next(); 
    double num2 = Double.parseDouble(in); 

    if(oper == '+') { 
     double result = num1 + num2; 
     System.out.println(result); 
    } else if(oper == '-') { 
     double result = num1 - num2; 
     System.out.println(result); 
    } else if(oper == 'x') { 
     double result = num1 * num2; 
     System.out.println(result); 
    } else if(oper == '/') { 
     double result = num1/num2; 
     System.out.println(result); 
    } else { 
     double result = num1 % num2; 
     System.out.println(result); 
    } 
     System.out.println("Hope this helped your mathmatical troubles!"); 
} 

}
И как по привычке, а не делать:

import java.util.*; 

лучше

import java.util.Scanner; 

Это, вероятно, не имеет большого значения здесь, но если вы используете гораздо большую программу импорта весь java.util значительно замедлит вашу программу.

Надеюсь, это поможет!

+0

Ваш последний пункт неправильный. Импорт пакетов подстановок не влияет на производительность выполнения. Он используется только для разрешения символа времени компиляции –

+0

Извините. Просто я слышал, как многие люди говорят, что импорт всех java-библиотек замедляет работу программы. Или я обманул? – Dan299

+0

Я подозреваю, что вы не обманывали - всего лишь тонна дезинформации. Взгляните на [этот вопрос] (http://stackoverflow.com/questions/7128348/performance-difference-between-a-wild-card-import-and-the-required-class-import). –

0
import java.lang.*; 

import java.util.*; 


public class Calculator 
{ 
    private int solution; 
    private int x; 
    private int y; 
private char operators; 

    public Calculator() 
    { 
     solution = 0; 
     Scanner operators = new Scanner(System.in); 
     Scanner operands = new Scanner(System.in); 
    } 

    public int addition(int x, int y) 
    { 
     return x + y; 
    } 
    public int subtraction(int x, int y) 
    { 
     return x - y; 
    } 
    public int multiplication(int x, int y) 
    {  
     return x * y; 
    } 
    public int division(int x, int y) 
    { 
     solution = x/y; 
     return solution; 
    } 
    public void main (String[] args) 
    { 
     System.out.println("What operation? ('+', '-', '*', '/')"); 

     System.out.println("Insert 2 numbers to be subtracted"); 
     System.out.println("operand 1: "); 
     x = operands; 
     System.out.println("operand 2: "); 
     y = operands.next(); 
     switch(operators) 
     { 
      case('+'): 
      addition(operands); 
      operands.next(); 
      break; 
      case('-'): 
      subtraction(operands); 
      operands.next(); 
      break; 
      case('*'): 
      multiplication(operands); 
      operands.next(); 
      break; 
      case('/'): 
      division(operands); 
      operands.next(); 
      break; 
     } 
    } 
} 
-1

Вы просите пользователя ввести целые числа, но вы кладете заявление operands.next(); в качестве входных данных. Постарайтесь поддерживать совместимость с вашими переменными и пользовательским вводом, поэтому сменять его на operands.nextInt().

Смежные вопросы