#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);
}