Я пишу код для приложения, которое отслеживает покупки продуктов ученика в столовой кампуса. Существует два класса: Студент, в котором хранятся перегруженные конструкторы & соответствующий геттер & методы setter; и MealCard, который содержит переменную класса для отслеживания количества выпущенных карточек еды, соответствующего метода getter &, метода purchaseItem(), метода purchasePoints() & метода overriddden toString(). Там также есть Тестер.Методы вызова из разных классов | Java
В моем классе MealCard, методы написаны, но в Tester, когда я их называю, они не работают правильно. Я хочу получить itemValue от пользователя, но как это сделать в классе MealCard?
То же самое касается метода purchasePoints, как получить topUpValue от пользователя в MealCard класс?
код до сих пор:
public class Student {
// Instance Variables
private String name;
private int age;
private String address;
// Default Constructor
public Student() {
this("Not Given", 0, "Not Given");
}
// Parameterized constructor that takes in values
public Student(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
// Getters and Setters
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress(){
return address;
}
public void setAddress(String address) {
this.address = address;
}
// toString() to be overriden
@Override
public String toString() {
return "Name: " + this.name + "\n" + "Age: " + this.age + "\n" + "Address: " + this.address;
}
}
`
public class MealCard extends Student {
static int numberOfMealCards;
private final static int DEFAULT_BALANCE = 1000;
private int itemValue;
private int topUpValue;
public int newBalance;
// Getters and Setters
public int getItemValue() {
return itemValue;
}
public void setItemValue(int itemValue) {
this.itemValue = itemValue;
}
public int getTopUpValue() {
return topUpValue;
}
public void setTopUpValue(int topUpValue) {
this.topUpValue = topUpValue;
}
// purchaseItem method for when students buy food
public int purchaseItem() {
newBalance = DEFAULT_BALANCE - itemValue;
return newBalance;
}
// purchasePoints method for students topping up their meal card balance
public int purchasePoints() {
newBalance = DEFAULT_BALANCE + topUpValue;
return newBalance;
}
// Overriden toString method
@Override
public String toString() {
return super.toString() + "Meal Card Balance: " + this.newBalance + "\n" + "Number of Meal Cards: " + numberOfMealCards;
}
}
`
import java.util.Scanner;
public class TestMealCard {
public static void main(String[] args) {
// Create instances of MealCard class
MealCard student1 = new MealCard();
MealCard student2 = new MealCard();
Scanner keyboard = new Scanner(System.in);
System.out.println("Name: ");
student1.setName(keyboard.nextLine());
System.out.println("Age: ");
student1.setAge(keyboard.nextInt());
System.out.println("Address: ");
student1.setAddress(keyboard.nextLine());
System.out.println("Meal Card Balace: ");
student1.newBalance = keyboard.nextInt();
System.out.println("Number of Meal Cards Issued: ");
student1.numberOfMealCards = keyboard.nextInt();
System.out.println("Name: ");
student2.setName(keyboard.nextLine());
System.out.println("Age: ");
student2.setAge(keyboard.nextInt());
System.out.println("Address: ");
student2.setAddress(keyboard.nextLine());
System.out.println("Meal Card Balace: ");
student2.newBalance = keyboard.nextInt();
System.out.println("Number of Meal Cards Issued: ");
student2.numberOfMealCards = keyboard.nextInt();
// Call purchaseItem
student1.purchaseItem();
// Call purchasePoints
student2.purchasePoints();
// Call tString to output information to user
}
}
Что вы не распечатываете полностью, можете привести пример вывода, который происходит и чего вы ожидаете? – chrissukhram
Комментарий от Meguy 26: Что вы подразумеваете под словом «они не работают правильно»? Ошибка? Или значения неправильно установлены/получены/изменены. Ваш код не будет работать до тех пор, пока переменные не будут отменены, что означает, что вы должны вызывать student1.setTopUpValue (int) перед вызовом student1.getToUpValue, я бы установил эти значения, TopUp, mealCardNumber и т. Д., Как 0 или другой заполнитель номер, но это только я. – xlm
Комментарий от Meguy 26: Действительно ли вы не можете вызвать метод или, как упомянуто выше, они вызывают ошибку? Если вы не можете вызвать метод, возможно, создание конструктора класса MealCard, вместо использования унаследованного, будет работать. Как последнее примечание, я бы предложил не переопределять toString(), его такой базовый метод объекта, который он лучше оставил без изменений, просто реализовать свой собственный getID или getStringId или что-то в этом роде. – xlm