2015-03-20 4 views
2

Я пишу код для приложения, которое отслеживает покупки продуктов ученика в столовой кампуса. Существует два класса: Студент, в котором хранятся перегруженные конструкторы & соответствующий геттер & методы 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 
} 
} 
+1

Что вы не распечатываете полностью, можете привести пример вывода, который происходит и чего вы ожидаете? – chrissukhram

+0

Комментарий от Meguy 26: Что вы подразумеваете под словом «они не работают правильно»? Ошибка? Или значения неправильно установлены/получены/изменены. Ваш код не будет работать до тех пор, пока переменные не будут отменены, что означает, что вы должны вызывать student1.setTopUpValue (int) перед вызовом student1.getToUpValue, я бы установил эти значения, TopUp, mealCardNumber и т. Д., Как 0 или другой заполнитель номер, но это только я. – xlm

+0

Комментарий от Meguy 26: Действительно ли вы не можете вызвать метод или, как упомянуто выше, они вызывают ошибку? Если вы не можете вызвать метод, возможно, создание конструктора класса MealCard, вместо использования унаследованного, будет работать. Как последнее примечание, я бы предложил не переопределять toString(), его такой базовый метод объекта, который он лучше оставил без изменений, просто реализовать свой собственный getID или getStringId или что-то в этом роде. – xlm

ответ

0

Для того, чтобы установить ItemValue от пользователя вам нужно, чтобы получить этот вход от используя этот метод setItemValue().

Ex.

System.out.print("Please enter the item value: "); 
student1.setItemValue(keyboard.nextInt()); 

или

int itemVal = 0; 
System.out.print("Please enter the item value: "); 
itemVal = keyboard.nextInt(); 
student1.setItemValue(itemVal); 

, как и для другого вызова метода просто называют сеттера для toUpValue.

Ex.

System.out.print("Please enter the item value: "); 
student1.setTopUpValue(keyboard.nextInt()); 

или

int toUpVal = 0; 
System.out.print("Please enter the item value: "); 
itemVal = keyboard.nextInt(); 
student1.setTopUpValue(topUpVal); 

Надежда, что помогает =).

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