将一个类中的Array元素用于同一个包中的另一个类

时间:2013-12-02 02:05:39

标签: java arrays

我正在尝试将一个类中的数组元素用于另一个类。没有错误发生但它不打印任何值。这是我的代码。

public class Cow implements Animal { 
    public   ArrayList<cage> getSchedule(ArrayList<cage> cages) {
        for(int a = 0; a < cages.size(); a++) {     
            Cage ct = (Cage)cages.get(a);
            A[a]=ct.getStart();
            B[a]=ct.getEnd();
        }
        return null;
    }
}

现在我试图在名为"KnapsackSolver"的另一个类中调用数组A []和B []。我从arraylist复制代码直到返回null并且它没有显示错误。但是当我尝试在knapsackSolver类中打印A[]B[]时,它不打印任何内容,而是在控制台"Exception in thread "main" java.lang.NullPointerException"上说出一条消息。

请帮助我如何在KnapsackSolver类中使用A和B数组的值。澄清A和B中的数据是双重类型及其声明我没有在这里显示以节省空间和时间。期待一些建议。

2 个答案:

答案 0 :(得分:0)

我认为您使用return cages;而不是return null;之类的内容我认为这跟principle of least surprise一样,并允许Method chaining。此外,您的ArrayList<cage>几乎肯定是ArrayList<Cage> - 但我更喜欢更通用的List<Cage>甚至Collection<Cage>。最后,一个Cage(s)数组将是Cage[] cages; - ArrayList(s)由数组支持,但它们与数组不同。您是否在toString()中实施了Cage?我也会推荐这个。

答案 1 :(得分:0)

冒着听起来很苛刻的风险,你的代码片段中有很多东西给我的印象是你只是从编程开始。 它没有任何问题,你只需要知道你正在进入的内容:)

在java中,通常的做法是让您的类名以大写字母开头(在您的示例中,Cow而不是cow)。 此外,在您的示例中,尽可能使用界面来尝试使用OO编程的强大功能,而不是使用List而不是ArrayList。 有人说,如果编程中的一些难题,命名是一个。例如,我们通常将索引命名为ijk ......我们从不以a开头。 然后是你的函数的返回值。它被输入为List,但它总是返回null。你可能想要将返回值更改为void(不返回任何内容)或实际返回列表,甚至是空的。 我还有一种印象,即您正在使用AB来返回您的日程安排,这通常不是一个好主意(除了您命名一个函数得到的不是得到你的任何东西,你也使用实例属性在函数之间传输值,并创建2个变异的相关数组,而不是单个的Schedules数组)

现在,回到你的问题,我希望看到AB的完整声明,但我怀疑它们不是在任何地方被定义,或者你是尝试使用方法的返回值,该值始终为null。那个,或者cages是未初始化对象的列表(如果getStartgetEnd返回null DoubleAB是{{1} },你会得到一个NPE)