Сообщения об ошибках в коде Java, в котором я создаю 2 объекта калькулятора и выполняю над ними операции

#java #object

#java #объект

Вопрос:

Вот основной файл Java:

    class Main {
  public static void main(String[] args) {
   Calculator One = new Calculator(100,50,"Addition");
   One.calculateNums();
   One.showResults();
   Calculator Two = new Calculator(100,50,"Subtraction");
   Two.changeNumOne("200");
   Two.calculateNums();
   Two.showResults();

  }
}
  

И вот код Java калькулятора:

 public class Calculator {
  // instance variables - first number, second number, operation
  private int firstNum;
  private int secondNum;
  private String operation;

  // static field to keep track of number of Calculator objects
  public static int Calculatorobjects = 0;
  // default constructor
  public Calculator(){
    int firstNum = 0;
    int secondNum = 0;
    operation = "Addition";
  }
  // initializing constructor
  public Calculator(int firstNum, int secondNum, int NumOperation){
    NumOne = firstNum;
    NumTwo = secondNum;
    NumOperation = operation;
  }
  // getters for all 3 instance variables
  public int one(){
    return firstNum;
  }
  public int two(){
    return secondNum;
  }
  public String three(){
    return operation;
  }
  // setters to be able to change any of the 3 instance variables after creating them
  public void changeNumOne(int NewNumOne){
    firstNum = NewNumOne;
  }
  public void changeNumOne(int NewNumTwo){
    SecondNum = NewNumTwo;
  } 
  public void changeNumOne(String NewNumOperation){
    operation = NewNumOperation;
  }
  // instance method to perform operation
  public void calculateNums(int result){
    if(operation == "Addition"){
      result = firstNum   secondNum;
    }
    if(operation == "Subtraction"){
      result = firstNum - secondNum;
    }
  }
  // instance method to display results
  public void showResults(){
    System.out.println(firstNum   " "    operation   " "   secondNum   " = "   result);
  }
}
  

Я получаю следующие сообщения об ошибках:

 exit status 1
Calculator.java:35: error: method changeNumOne(int) is already defined in class Calculator
  public void changeNumOne(int NewNumTwo){
              ^
Calculator.java:36: error: cannot find symbol
    SecondNum = NewNumTwo;
    ^
  symbol:   variable SecondNum
  location: class Calculator
Calculator.java:52: error: cannot find symbol
    System.out.println(firstNum   " "    operation   " "   secondNum   " = "   result);
                                                                               ^
  symbol:   variable result
  location: class Calculator
Main.java:4: error: method calculateNums in class Calculator cannot be applied to given types;
   One.calculateNums();
      ^
  required: int
  found: no arguments
  reason: actual and formal argument lists differ in length
Main.java:8: error: method calculateNums in class Calculator cannot be applied to given types;
   Two.calculateNums();
      ^
  required: int
  found: no arguments
  reason: actual and formal argument lists differ in length
5 errors
  

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

Ответ №1:

1.) По крайней мере, вам нужно исправить:

 public void changeNumOne(int NewNumOne){
    firstNum = NewNumOne;
}

// Error: Same name as above
public void changeNumOne(int NewNumTwo){
    // Error: Capital SecondName
    SecondNum = NewNumTwo;
} 
  

Для:

 public void changeNumOne(int firstNum){
    this.firstNum = firstNum;
}

public void changeNumTwo(int secondNum){
    this.secondNum = secondNum;
} 
  

2.) И здесь вы хотели бы распечатать result , но в вашем классе нет такой переменной (также проверьте, имеет ли calculateNums смысл ваша функция):

 public void showResults(){
    System.out.println(firstNum   " "    operation   " "   secondNum   " = "   result);
}
  

3.) Это также должно завершиться неудачей:

 public Calculator(int firstNum, int secondNum, int NumOperation){
    NumOne = firstNum;
    NumTwo = secondNum;
    NumOperation = operation;
}
  

Должно быть:

 public Calculator(int firstNum, int secondNum, string operation){
    this.firstNum = firstNum;
    this.secondNum = secondNum;
    this.operation = operation;
}
  

4.) Здесь вы не присваиваете значения:

 public Calculator(){
    int firstNum = 0;
    int secondNum = 0;
    operation = "Addition";
}
  

Должно быть:

 public Calculator(){
    this.firstNum = 0;
    this.secondNum = 0;
    this.operation = "Addition";
}
  

В целом:

Могут быть и другие ошибки.

Вам нужно проверить все имена ваших переменных. Они довольно противоречивы. Тем не менее, внимательно прочитайте свои сообщения об ошибках и постарайтесь понять их на будущее.

Ответ №2:

Существует много ошибок. Я решил с помощью этого кода, действуя с Calculator классом. Я прокомментировал код, в котором были ошибки.

 class Calculator {
// instance variables - first number, second number, operation
private int firstNum;
private int secondNum;
private int resu<   //I declare the result variable so I can print it
private String operation;

// static field to keep track of number of Calculator objects
public static int Calculatorobjects = 0;
// default constructor
public Calculator(){
    this.firstNum = 0;    //useless because uninitialized int are already 0
    this.secondNum = 0;     //same
    this.operation = "Addition";
}
// initializing constructor
public Calculator(int firstNum, int secondNum, String NumOperation){   //NumOperation is a String, not an int
    this.firstNum = firstNum;    //I'm setting the global variables as the local variables that you pass to the constructor
    this.secondNum = secondNum;
    this.operation = NumOperation;
}
// getters for all 3 instance variables
public int one(){
    return firstNum;
}
public int two(){
    return secondNum;
}
public String three(){
    return operation;
}
// setters to be able to change any of the 3 instance variables after creating them
public void changeNumOne(int NewNumOne){
    firstNum = NewNumOne;
}
public void changeNumTwo(int NewNumTwo){.   //changed method name
    secondNum = NewNumTwo;
}
public void changeNumOne(String NewNumOperation){
    operation = NewNumOperation;
}
// instance method to perform operation
public void calculateNums(){
    if(operation.equals("Addition")){     //equals is used to compare strings
        result = firstNum   secondNum;
    }
    if(operation.equals("Subtraction")){
        result = firstNum - secondNum;
    }
}
// instance method to display results
public void showResults(){
    System.out.println(firstNum   " "    operation   " "   secondNum   " = "   result);
}