【问题标题】:My ArrayList of Objects isn't printing out the Object attribute I want我的 ArrayList of Objects 没有打印出我想要的 Object 属性
【发布时间】:2014-08-11 16:33:56
【问题描述】:

我有一个对象的 ArrayList。对象是花。将鲜花添加到鲜花列表后,我想打印出每朵鲜花的名字。每当我添加一朵花时,我都会给这朵花起个名字。假设我添加了三朵花,分别名为“玫瑰”、“郁金香”和“水仙花”。当我运行遍历 ArrayList 的函数时,我得到的只是三个水仙花。如果我添加五朵花,它会显示五朵花,但它们都有我添加的最后一朵花的名字。这是我的主要课程:

import java.util.Scanner;
import java.util.ArrayList;

public class mainClass {

    static ArrayList<flowerClass> flowerPack = new ArrayList<flowerClass>();


    public static void main(String[] args){
        Scanner input = new Scanner(System.in);

        while(true){
            System.out.println("1. Add flower to flowerpack.");
            System.out.println("2. Display the flowers in the flowerpack.");

            int userChoice = input.nextInt();

            switch(userChoice){
            case 1:
                addFlower();
                break;
            case 2:
                displayFlowers();
                break;
            }
        }
    }

    public static void addFlower(){
        Scanner input = new Scanner(System.in);
        System.out.println("What is the flower's name?");
        String flowerName = input.nextLine();
        flowerPack.add(new flowerClass(flowerName));
    }

    public static void displayFlowers(){

        for (Object o: flowerPack){
            System.out.println(flowerClass.getName());
        }
    }
}

这是我的flowerClass:

    public class flowerClass {

    public static int numberOfFlowers = 0;
    public static String flowerName = null;
    static String flowerColor = null;
    static int numberThorns = 0;
    static String flowerSmell = null;

    flowerClass(String desiredName){
        flowerName = desiredName;
        numberOfFlowers++;
    }

    public static void setName(String desiredName){
        flowerName = desiredName;
    }

    public static String getName(){
        return flowerName;
    }
}

我尝试使用对象数组而不是 ArrayList。我可以让它显示每个单独的flowerClass 对象的唯一地址,但我永远无法成功访问每个对象的flowerName 以将其显示给用户。感谢您的任何建议。

【问题讨论】:

  • flowerClass中的任何地方删除static关键字
  • 将你的 for 循环更改为 for(flowerClass o : flowerPack) 并从所有地方删除静态
  • 非常感谢大家!我会回去回顾一下静态的、公开的、私有的。似乎这是最令人头疼的问题,以及将 Object 替换为flowerClass。我将尝试所有这些并查看关键字。
  • 我不觉得这是重复的原因是因为这个问题还涉及迭代对象 ArrayList 的正确方法。它不仅仅处理静态本身。除了直接针对类访问方法之外,我的问题还涉及创建多个对象和访问特定属性而不仅仅是方法的细微差别。

标签: java object arraylist


【解决方案1】:

有几件事。首先,您不应该将其设置为静态:

public static String flowerName = null;

作为一个静态变量,flowerClass 的所有实例都将具有相同的flowerName。应该是:

public String flowerName;  // null is implicit

第二,你的循环:

for (Object o: flowerPack){
    System.out.println(flowerClass.getName());
}

您在这里所做的是在类flowerClass 上调用getName(),而不是flowerClass 的实例。他们唯一可以编译的原因是因为您将这些方法标记为静态。

从你的 getter 和 setter 中移除静态(同样你想访问flowerClass 的instance,而不是类flowerClass):

public void setName(String desiredName){
    flowerName = desiredName;
}

public String getName(){
    return flowerName;
}

然后遍历flowerClass的instances

for (flowerClass flower: flowerPack){
     System.out.println(flower.getName());
}

【讨论】:

    【解决方案2】:

    这是因为您的 setter 和 getter 方法以及成员变量“name”是静态的。因此,每当您设置花名时,您基本上都会覆盖以前的花名。因为所有对象只有一个名称。你所有的对象基本上都指向同一个名字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多