2014-11-23 2 views
0

У меня есть этот код уже написано:Как напечатать имя объекта в ArrayList?

import java.util.ArrayList; 
import java.util.List; 


public class TestBox { 

    public static void main(String[]args){ 

     ShoeBox nike = new ShoeBox(); 
     Box present = new CandyBox(3,2,6); 
     JewelryBox gift = new JewelryBox(); 
     Box pictures = new ShoeBox(); 
     Box skittles=new CandyBox(6,3,1); 
     CandyBox dots=new CandyBox(3,2,1); 
     Box jareds=new JewelryBox(); 
     List<Box> boxes=new ArrayList<Box>(); 
     boxes.add(nike); 
     boxes.add(present); 
     boxes.add(gift); 
     boxes.add(pictures); 
     boxes.add(skittles); 
     boxes.add(dots); 
     boxes.add(jareds); 

     double temp=0; 
     for (Box x:boxes) 
      temp=temp+x.getVolume(); 

     for (int i=0;i<boxes.size();i++) 
      System.out.println(boxes.get(i)); 

     double count=0; 
     for (int k=0;k<boxes.size();k++) 
      if ((boxes.get(0).getVolume())<(boxes.get(k).getVolume())) 
       count=boxes.get(k).getVolume(); 
     System.out.println("The box with the biggest volume is the "+boxes.get((int)count)+". The dimensions of the box" 
       + "are "+boxes.get((int)count).getLength()+" x "+boxes.get((int)count).getWidth()+" x " 
       +boxes.get((int)count).getHeight()+"."); 
    } 
} 

Это мой тестер для класса под названием Box. Подклассы показаны в их творениях. Какова строка кода, необходимая для распечатки имени объектов, таких как кегли или дживы?

Мне нужно напечатать «имя» объекта с наибольшей громкостью. Скажем, объект «nike» имеет наибольший объем. В заявлении для печати внизу основного раздела следует указать: «Ящик с наибольшим объемом - это nike. Размеры 12 x 12 x 12.»

+1

С * имя объекта * вы имеете в виду, как получить простое имя класса? Если это так, используйте 'yourObject.getClass(). GetSimpleName()'. –

+0

@LuiggiMendoza Можете ли вы объяснить, что такое простое имя? Извините, это мой первый учебный код. Я ищу способ распечатать имена объектов в ячейках ArrayList. –

+2

Ну, у объекта нет имени. У класса do есть имя. Класс имеет полное имя, которое является именем принадлежащего ему пакета и простым именем класса. Например, если ваш класс 'TestBox' находится внутри пакета' edu.yourcollege.noah', то его полное имя будет 'edu.yourcollege.noah.TestBox', а простым именем будет' TestBox'. –

ответ

0

Похоже, вы хотите напечатать имя переменной, которая соответствует определенным критериям и хранится в вашей коллекции (ваш List). Это невозможно в Java, так как во время выполнения вы не можете получить доступ к имени переменных. В этом случае вы должны добавить в класс поле, которое поможет вам идентифицировать экземпляр объекта, с которым вы работаете. Это поле может быть int id или String name (чтобы это было просто).

Чтобы сделать вещи проще, добавить поле в Box классе:

public class Box { 
    //fields already declared here... 
    //adding name field 
    protected String name; 
    public String getName() { 
     return this.name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

Затем выполнить это поле при создании объектов:

//setting the name of the object just with the name of the variable 
//just for understanding purposes 
//you cannot access to the name of the variable at runtime, no matter what 
//also, you need to change the constructor of each class accordingly 
ShoeBox nike = new ShoeBox("nike"); 
Box present = new CandyBox("present",3,2,6); 
JewelryBox gift = new JewelryBox("gift"); 
Box pictures = new ShoeBox("pictures"); 
Box skittles=new CandyBox("skittles",6,3,1); 
CandyBox dots=new CandyBox("dots",3,2,1); 
Box jareds=new JewelryBox("jareds"); 

А потом, когда объект совпадает с вашим критерии, вы можете использовать его для того, что вы хотите/нуждаетесь, например

  • Критерии: Наибольший объем
  • Что делать: отображать это имя пользователя

Код:

double temp = 0; 
Box boxWithLargestVolume = null; 
for (Box box : boxes) { 
    if (temp < x.getVolume()) { 
     temp = x.getVolume(); 
     boxWithLargestVolume = box; 
    } 
} 
if (boxWithLargestVolume != null) { 
    System.out.println("The box with the largest volume is: " 
     + boxWithLargestVolume.getName()); 
} 
+0

Проблема в том, что это назначение было назначено моим учителем. Она дала нам параметры для конструкторов, и она дала нам код клиента для тестера, который включал создание экземпляров ящиков. –

+0

@NoahBarboza расскажите своему профессору, что если у вас нет поля для идентификации вашего объекта, тогда не будет никакого человеческого способа его распознать. Все это в программном обеспечении (и в наших умах). –