2014-12-12 2 views
0

Вот вам класс Die, о котором вы просили ... Алекс не мог бы вам подробнее рассказать об использовании .getValue в моем классе Die?Сумма списка Array & ArrayClass


public class Die 
{ 
    private final int MAX = 6; // maximum face value 

    private int faceValue; // current value showing on the die 

    //----------------------------------------------------------------- 
    // Constructor: Sets the initial face value. 
    //----------------------------------------------------------------- 
    public Die() 
    { 
     faceValue = 1; 
    } 

    //----------------------------------------------------------------- 
    // Rolls the die and returns the result. 
    //----------------------------------------------------------------- 
    public int roll() 
    { 
     faceValue = (int)(Math.random() * MAX) + 1; 

     return faceValue; 
    } 

    //----------------------------------------------------------------- 
    // Face value mutator. 
    //----------------------------------------------------------------- 
    public void setFaceValue (int value) 
    { 
     faceValue = value; 
    } 

    //----------------------------------------------------------------- 
    // Face value accessor. 
    //----------------------------------------------------------------- 
    public int getFaceValue() 
    { 
     return faceValue; 
    } 

    //----------------------------------------------------------------- 
    // Returns a string representation of this die. 
    //----------------------------------------------------------------- 
    public String toString() 
    { 
     String result = Integer.toString(faceValue); 

     return result; 
    } 
} 

Я попытался использовать другой код, чтобы найти сумму моего массива и ArrayList ... вот мой код. Может кто-нибудь, пожалуйста, скажите мне, как решить конец.

import java.util.ArrayList; 


public class Driver { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     final int SIZE = 10; 
     Die sumArray; 
     Die sumArrayList; 


     Die[] DieList = new Die[SIZE]; 

     ArrayList<Die> DieList2 = new ArrayList<Die>(); 

     for (int i = 0; i < SIZE; i++) 
     { 
      DieList[i] = new Die(); 
     } 

     for (int i = 0; i < SIZE; i++) 
     { 
      DieList2.add(new Die()); 
     } 

     for (int i = 0; i < SIZE; i++) 
     { 
      DieList[i].roll(); 
     } 

     for (int i = 0; i < SIZE; i++) 
     { 
      DieList2.get(i).roll(); 
     } 

     System.out.print("Array: "); 

     for (int i = 0; i < SIZE; i++) 
     { 
     System.out.print(DieList[i] + " "); 
     } 

     System.out.println(); 

     System.out.println("ArrayList: " + DieList2); //.get(index) specific index value in the arrayList 

     for (Die i : sumArray){ 
      sumArray+= i; 
     } 

    // sumArrayList = (DieList2(0) + DieList[1] + DieList[2] + DieList[3] + DieList[4] + DieList[5] + DieList[6] + DieList[7] + DieList[8] + DieList[9] + DieList[10]); 

    } 
} 
+0

Знание класса Die помогло бы. –

+1

Могу ли я спросить, почему вы используете ArrayList и Array, делая то же самое с ними обоими? –

+0

Рассмотрите возможность свернуть первые 4 для петель в одну петлю с четырехпозиционным телом, гораздо более сжатым и читаемым ... – RobP

ответ

0

Я вижу, вы missunderstanding некоторые понятия:

  • Метод печати определен в классе Object (класс, из которого все классы наследуют) напечатает ссылку объекта, а не какой-либо атрибут. Это должно быть очевидно, так как метод печати не мог знать, какой атрибут для печати (ни один список атрибутов и ссылок не хранится в объекте, чтобы идти один за другим). Если вам нужно распечатать свои внутренние атрибуты, вам нужно написать метод специально для этого или перезаписать метод печати, но если у вас нет веской причины перезаписывать предопределенный метод, не делайте этого. Назовите это getValue(), то есть

  • sumArray - это только объект, а не список объектов. То, как вы выполняете цикл в первом цикле, читает только один объект, поскольку sumArray - один из объектов Die, а не список.

  • За исключением строк, оператор + используется только для примитивных типов (int, boolean, float, ...). Если + = не нарушает вашу компиляцию, я понимаю, что компилятор интерпретирует операцию как одну операцию присваивания, поэтому вы говорите, что ссылочный sumArray теперь снова указывает на ... sumArray. Заявление бесполезно.

  • Что касается последней строки, прокомментированной, вы НЕ МОЖЕТЕ суммировать объекты по причинам, описанным выше. Объект является сложным сущностным соединением по многим атрибутам и методам, и компилятор не может знать, как суммировать по умолчанию эти объекты. Если по какой-либо причине вы пришли к Java от C++ будьте в курсе, что вы не можете перегрузить операторы (но, конечно, это не ваш случай)

Итак, если вы хотите Готовили раствор

  • определить ПолучитьЗначение() метод в вашем классе Die, чтобы прочитать сохраненное значение. Я предполагаю, что вы правильно закодировали значение roll для генерации значения и сохранили его.

Суммируя все значения из вашего массива сделать:

int sums1=0;  
for (Die i : DieList){ 
sums1+= i.getValue(); 
} 

Суммируя все значения из вашего ArrayList сделать:

int sums2=0;  
for (int i=0;i<DieList2.size();i++){ 
    sums2+= DieList2.get(i).getValue(); 
} 

И, наконец, чтобы напечатать их:

System.out.println("Sum of array elements: "+sums1); 
System.out.println("Sum of ArrayList elements: "+sums2); 
0

Если вы просто пытаетесь найти сумму массива после прокатки Вы можете значительно сократить свой код!

Вы можете сконденсировать все добавления, прокатки и суммирования ваших кубиков в один цикл следующим образом.

public static void main(String[] args) { 
    final int SIZE = 10; 
    int sumList1 = 0; 
    int sumList2 = 0; 
    Die[] DieList = new Die[SIZE]; 
    ArrayList <Die> DieList2 = new ArrayList <Die>(); 

    for (int i = 0; i < SIZE; i++) { 
     DieList[i] = new Die(); 
     DieList2.add(new Die()); 
     DieList[i].roll(); 
     DieList2.get(i).roll(); 
     sumList1 += DieList[i].getFaceValue(); 
     sumList2 += DieList2.get(i).getFaceValue(); 
    } 

    System.out.println("Sum of Array: " + sumList1); 
    System.out.println("Sum of ArrayList: " + sumList2); 
    System.out.println("Sum of both: " + (sumList1 + sumList2)); 
}