簡體   English   中英

從另一個具有自己變量的類中調用方法

[英]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();
        }
    }
}

現在您不能獲得nameitemCost空值。

希望對您有幫助。

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來設置客戶nameitemCost ,然后調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM