2017-02-06 10 views
0

したがって、私のメソッドprintDetails()をCustomerTestクラスのCustomerクラスから呼び出しようとしています。変数の値は記録されていませんし、私はそれを実行すると、配列の名前とエラーのnullを取得します。私は変数の値を記録して印刷する方法を知りません。独自の変数を持つ別のクラスからメソッドを呼び出す

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(); 
     } 
    } 
} 
+1

実際には、インスタンスの変数に物事を割り当てる必要があります。 'main.name = scan.next();'の代わりに 'String name = scan.next()'を使います。 –

答えて

0

お客様のスキャナからの値をローカル変数に保存し、それらを顧客の変数に追加しないでください。

は次のようになります。

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(); 
    } 
0

あなたは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にnull値を取得することはできません。

ご希望の場合はお手数ですが、

0

あなたCustomerクラスで使用Setters方法、あなたがCustomerTestCustomerにクラス変数から値を設定することができるように。

顧客クラス::このようなことの後

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(); 
+1

私は自分で考え出すことになったが、これはどうやって感謝したのか! –

+0

それは素晴らしいです、あなたはあなたの 'クラス'の良いデザインのためのセッターを持っている必要があります。あなたが私の答えで他の人を助けるためにチェックしたいのであれば、気をつけてください@JeremyLleva。 – msagala25

0

Customerクラスと同様にCustomerTestの変数。

これらのlocal - 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(); 
    } 
} 

これは動作します! 覚えておくべき点:クラス間で同じ名前変数を使用しても、オブジェクト間の値は維持されません。

0

あなたが使用このアプローチは、あなたが他の一方で、各1に対する顧客のオブジェクトを作成する必要があるときに、printDetails()のパラメータで値を渡すことができ、その後、printDetails()メソッドを呼び出し、顧客のnameitemCostの値を設定するセッターとゲッターを使用することができますそのようなpublic void printDetails(String name, int[] itemCost) { // same logic here }その後、あなたはこの

public Customer(String name, int[] itemCost){ 
    this.name = name; 
    this.itemCost = itemCost; 
} 

のように、パラメータとして名前とitemCostを持つ顧客のコンストラクタを宣言することができ、あなたのテストクラスで使用すると、BUIできるmain.printDetails(name, itemCost);

0

を使用してそれを呼び出しますlこのようなユーザー入力後の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(); 
     } 
    } 
関連する問題