不打印ArrayList元素

时间:2014-05-12 13:32:54

标签: java oop collections arraylist tostring

我对java很陌生,而我正在尝试做的是使用集合为计算机零件商店中存储可用产品的目录制作模型。我的导师要求目录中的每个产品的一个实例。这就是我想出的:

import java.util.*;

public class AvailablesCatalog {

public AvailablesCatalog(List cat1) {

    cat1 = new ArrayList();

    Motherboard item1 = new Motherboard("MD4652", 1995, "Lenovo", 100.50,  "Intel", 32, 5);
    CPU item2 = new CPU("MD4652", 1995, "Lenovo", 100.50, 2.9, 6);
    Graphics item3 = new Graphics("MD4652", 1995, "Lenovo", 100.50, "AMD", 6);
    RAM item4 = new RAM("MD4652", 1995, "Lenovo", 100.50, "DDR2", 4, 1600);
    HD item5 = new HD("MD4652", 1995, "Lenovo", 100.50, "SSD", 2.5, 750);
    Monitor item6 = new Monitor("MD4652", 1995, "Lenovo", 100.50, "LED", 17.5, "1920x1080", "HDMI");
    Keyboard item7 = new Keyboard("MD4652", 1995, "Lenovo", 100.50, "Wireless");
    Mouse item8 = new Mouse("MD4652", 1995, "Lenovo", 100.50, "Laser", "Wireless");
    Printer item9 = new Printer("MD4652", 1995, "Lenovo", 100.50, "Laser", "Colored");

    cat1.add(item1);    
    cat1.add(item2);   
    cat1.add(item3);   
    cat1.add(item4);
    cat1.add(item5);    
    cat1.add(item6);   
    cat1.add(item7);   
    cat1.add(item8);
    cat1.add(item9);

}

public String toString(List cat1, int i) {
    for(i=0; i<cat1.size(); i++) {
        System.out.println(cat1.get(i).toString());
    }
    return "----------------------------------------------------";
}



}

现在,通过我用来打印目录的商店主应用程序,我已经在一个名为av的变量中存储了一个可用的对象类型实例。这是mainApp:

public class mainApp {

public static void main(String[] args){

    /* Variables for Menu System and Sub Menu System */
    int MainMenu;
    String SubMenu;
    String ReturnToMenu;
    String SubMenuReturnToMenu;
    List cat1 = new ArrayList();
    AvailablesCatalog av = new AvailablesCatalog(cat1);
    /* Displays menu system to console */
    System.out.println("..............MENU...............");
    System.out.println("..............1 View All Available Products..............");
    System.out.println("..............2 View Orders...................");
    System.out.println("..............3 View Sales...................");
    System.out.println("..............0 Exit...................");
    System.out.print("Please select an option: ");
    Scanner sc = new Scanner(System.in);
    MainMenu = sc.nextInt();
    if(MainMenu == 1){
        for(int i = 0; i < cat1.size(); i++) {
            System.out.println(av.toString(cat1, i));
        }
    }
    else if(MainMenu == 2) {

            System.out.println("lol");

    }
    else if(MainMenu == 3) {

            System.out.println("lol3");

    }
    else if(MainMenu == 4) {
        System.exit(0);
    }
}
}

一切顺利编译,当我运行mainApp时,菜单显示正确。但是当我按1打印可用的产品目录时,程序就会结束。选项2和3只是现在btw的占位符。提前谢谢。

1 个答案:

答案 0 :(得分:5)

您在程序中使用了两个不同的List

  • 第一个是cat1方法中的main(为空)
  • 构造函数中的第二个(在构造函数中填充)

您在构造函数中使用新创建的列表覆盖引用,并填充该引用。这是构造函数完成后收集的垃圾,没有引用指向它。

toString方法中,您打印的是通过参数传递的列表,该列表来自main(并为空)。

从构造函数中删除cat1 = new ArrayList();行。然后它应该工作。