[英]Calling a method from another class that has its own variables
所以我試圖從Customer
類的Customer
類中調用方法printDetails()
。 變量的值沒有被記錄,當我運行它時,我的名字最終為空,而數組卻出錯。 我只是不確定如何獲取要記錄和打印出的變量的值。
public class Customer {
public String name;
public int[] itemCost;
public void printDetails(){
System.out.print("Great, here is your customer's purchase details: \n");
System.out.print("Name:"+name);
System.out.println();
for (int i = 0; i < itemCost.length; i ++){
System.out.print("Item Cost #" + (i+1) + " : ");
System.out.print(itemCost[i] + "\n");
}
int sum = IntStream.of(itemCost).sum();
System.out.println("Total:" + sum);
}
}
public class CustomerTest {
public static void main(String[] args){
Customer main = new Customer();
Scanner scan = new Scanner(System.in);
System.out.print("Do you want to create a customer? \n");
String s = scan.next();
if(s.equals("y") || s.equals("yes")){
System.out.print("Ok, what's his/her name? \n");
String name = scan.next();
System.out.print("How many items is the customer buying? \n");
int n = scan.nextInt();
int itemCost[] = new int[n];
for (int i = 0; i < itemCost.length; i ++){
System.out.print("Enter a value for item #"+(i+1) );
System.out.printf("%n");
int j = scan.nextInt();
itemCost[i] = j;
}
main.printDetails();
}
}
}
您將掃描儀中的值保存在局部變量中,而不將其添加到客戶變量中。
應該看起來像這樣:
Customer main = new Customer();
Scanner scan = new Scanner(System.in);
System.out.print("Do you want to create a customer? \n");
String s = scan.next();
if(s.equals("y") || s.equals("yes")){
System.out.print("Ok, what's his/her name? \n");
main.name = scan.next(); //HERE
System.out.print("How many items is the customer buying? \n");
int n = scan.nextInt();
main.itemCost = new int[n]; //HERE
for (int i = 0; i < main.itemCost.length; i ++){ //HERE
System.out.print("Enter a value for item #"+(i+1) );
System.out.printf("%n");
int j = scan.nextInt();
main.itemCost[i] = j; //AND HERE
}
main.printDetails();
}
您需要為Customer
類的實例分配值。
樣例代碼
public class CustomerTest {
public static void main(String[] args){
Customer main = new Customer();
Scanner scan = new Scanner(System.in);
System.out.print("Do you want to create a customer? \n");
String s = scan.next();
if(s.equals("y") || s.equals("yes")){
System.out.print("Ok, what's his/her name? \n");
String name = scan.next();
main.name = name; //added to assign value of name to Custommer's name.
System.out.print("How many items is the customer buying? \n");
int n = scan.nextInt();
int itemCost[] = new int[n];
main.itemCost = new int[n]; //Here also need to initialize size for array.
for (int i = 0; i < itemCost.length; i ++){
System.out.print("Enter a value for item #"+(i+1) );
System.out.printf("%n");
int j = scan.nextInt();
itemCost[i] = j;
main.itemCost[i] = j; //added to assign value of itemCost to Custommer's itemCost.
}
main.printDetails();
}
}
}
現在您不能獲得name
和itemCost
空值。
希望對您有幫助。
在Customer
類中使用設置Setters
方法 ,以便可以將CustomerTest
的值設置為Customer
類變量。 像這樣:
客戶類別:
public class Customer {
public String name;
public int[] itemCost;
public void printDetails(){
System.out.print("Great, here is your customer's purchase details: \n");
System.out.print("Name:"+name);
System.out.println();
for (int i = 0; i < itemCost.length; i ++){
System.out.print("Item Cost #" + (i+1) + " : ");
System.out.print(itemCost[i] + "\n");
}
int sum = IntStream.of(itemCost).sum();
System.out.println("Total:" + sum);
}
/**
* Your Setters method...
*/
public void setName(String name){
this.name = name;
}
public void setItemCost(int[] itemCost){
this.itemCost= itemCost;
}
}
之后,您可以在CustomerTest
像這樣使用它:
CustomerTest類:
// In the End part of your CustomerTestClass
main.setName(name);
main.setItemCost(itemCost);
main.printDetails();
您已經在CustomerTest中創建了與Customer類中相同的變量。
這將行不通,因為這些本地-CustomerTest類變量與實際的Customer對象屬性之間沒有綁定。
您需要執行以下操作才能使更改實際反映到所有位置:
class CustomerTest{
public static void main(){
...
...
Scanner sc = new Scanner();
Customer obj = new Customer();
obj.name = sc.next();
...
...
//Test print function
obj.printDetails();
}
}
這將起作用! 需要記住的一點是:在類之間創建相同的名稱變量不會保留對象之間的值!
您可以使用setter和getter來設置客戶name
和itemCost
,然后調用printDetails()
方法,使用此方法時,您必須為每個對象創建客戶對象,另一方面,可以通過printDetails()
參數傳遞值像那個public void printDetails(String name, int[] itemCost) { // same logic here }
然后使用main.printDetails(name, itemCost);
調用它
您可以使用名稱和itemCost作為參數聲明一個Customer構造函數,如下所示
public Customer(String name, int[] itemCost){
this.name = name;
this.itemCost = itemCost;
}
在您的測試類中,您可以在用戶輸入后構建一個Customer對象,就像這樣
public class CustomerTest {
public static void main(String[] args){
Customer main; // = new Customer();
Scanner scan = new Scanner(System.in);
System.out.print("Do you want to create a customer? \n");
String s = scan.next();
if(s.equals("y") || s.equals("yes")){
System.out.print("Ok, what's his/her name? \n");
String name = scan.next();
System.out.print("How many items is the customer buying? \n");
int n = scan.nextInt();
int itemCost[] = new int[n];
for (int i = 0; i < itemCost.length; i ++){
System.out.print("Enter a value for item #"+(i+1) );
System.out.printf("%n");
int j = scan.nextInt();
itemCost[i] = j;
}
main = new Customer(name, itemCost);
main.printDetails();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.