2017-04-23 422 views
0

我对Java很陌生,对于获取设置数组感到困惑。只是超级基本的代码,我想更新学生类中的成绩数组。我使用double []输入数组设置Graddes,但是当我调用getGrades时,它返回垃圾:[[email protected]设置并获取双精度数组

我知道这东西超级简单的我失踪

public class Student 
{ 
    private double[] grades; 

    public void setGrades(double[] grades) 
    { 
     this.grades = grades; 
    } 

    public double[] getGrades() 
    { 
     return grades; 
    } 

    public static void main(String[] args) 
    { 
     double[] input = {87.54, 67.45}; 
     Student ted = new Student(); 
     ted.setGrades(input); 
     System.out.println(ted.getGrades()); 
    } 
} 

回答

3

打印已循环的数组的值按值抛出你的阵列和打印值,但有一个更好的方式,以便代替:

System.out.println(ted.getGrades()); 

你必须使用Arrays.toString(array)这样的:

System.out.println(Arrays.toString(ted.getGrades())); 
+1

明白了,谢谢你们! –

+0

不用理会@ dan_jen1 –

0

的Bec ause你返回一个数组。

getGrades()[0] 

获得的第一个元素在你的阵列

0

打印数组在Java中返回其哈希码,这是什么[[email protected]是。您需要指定索引in getGrades()或使用Arrays.toString(ted.getGrades())将阵列转换为可打印格式。

+1

这个数字是哈希码,而不是内存位置。 – Nevay

0

Java中的对象会覆盖名为toString()的函数,该函数返回在该类中定义的对象的任何字符串表示形式,并且在将对象实例传递给print方法时隐式调用toString()。原始数组不返回非常有用的字符串表示形式 - 只是散列对象以放置(例如)HashMap时使用的hashCode。但是,Arrays实用程序类包含一个更有用的toString()函数,您必须显式调用该函数,并将该数组作为参数传递。

Arrays.toString(ted.getGrades()); 

我建议计算如何访问各个等级数组的元素而不返回它。在没有控制的情况下留下访问内部对象数据的方法通常是一个糟糕的主意。如果你保存了对它的引用,你可以决定在你的程序的其他地方打开内部数组。一种可能性是将等级数组传递给对象构造函数,并让该构造函数完成该数组的完整副本。然后,获取单个数组索引访问的getter和setter,而不是访问整个数组。