为什么我的程序不打印它收到的数据而不是地址?

时间:2015-07-22 14:11:17

标签: java arrays output tostring

我创建了一个包含两个类的java程序。一个类(Main)包含传递到第二个类(Planning)的数据数组。第二个类(Planning)使用此数组为其变量'输入和输出'分配值。代码如下所示:

////Main.java///
import java.util.ArrayList
public class Main{
public enum State{A, D, H};

Planning plan = new Planning[]{
      new Plan(new State[]{State.A,State.A,State.A,State.A}, new State[]{State.D,State.A,State.A,State.D,State.A,State.A})}

另一个Class Planning.java看起来像这样:

public class Planning {


    Main.State[] input;
    Main.State[] output;
    Planning(Main.State[] input,Main.State[] output){
    this.input = input;
    this.output = output;

    System.out.println("The state is " + input);
}

但是,当我打印输出结尾时输入'它会显示

  

[LMain $国家; @ 4e98f805

我希望它显示从main函数传递给它的数组。有人可以告诉我怎样才能实现这个目标?

3 个答案:

答案 0 :(得分:5)

也许尝试使用System.out.println("The state is " + Arrays.toString(input));

因为打印输入相当于打印input.toString();并打印出数组的内存地址。

请参阅http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html

答案 1 :(得分:2)

您可以覆盖toString()课程中的Planning方法,因此当您打印出Planning对象时,它会打印您想要的信息。

这样的东西
public class Planning {
        Main.State[] input;
        Main.State[] output;

        Planning(Main.State[] input,Main.State[] output) {
            this.input = input;
            this.output = output;
        }

        @Override
        public String toString() { 
            return "PRINT INFORMATION FROM THE INPUT HERE THUS THE LOGIC FOR PRINTING THE INFO IS ENCAPSULATED";
        }
}

答案 2 :(得分:0)

只在Planning类中打印一小段更改:

 public class Planning {


        Main.State[] input;
        Main.State[] output;
        Planning(Main.State[] input,Main.State[] output){
            this.input = input;
            this.output = output;

            for(int i=0;i<input.length;i++){
                System.out.println("The state is " + input[i]);
            }
        }
    }