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

Java 为什么我的程序不打印它收到的数据而不是地址?,java,arrays,output,tostring,Java,Arrays,Output,Tostring,我创建了一个包含两个类的java程序。一个classMain包含传递到第二个classPlanning的数据数组。第二个类规划使用此数组为其变量“input和output”赋值。代码如下所示: ////Main.java/// import java.util.ArrayList public class Main{ public enum State{A, D, H}; Planning plan = new Planning[]{ new Plan(new State[]{St

我创建了一个包含两个类的java程序。一个classMain包含传递到第二个classPlanning的数据数组。第二个类规划使用此数组为其变量“input和output”赋值。代码如下所示:

////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})}
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);
}
另一个类Planning.java如下所示:

////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})}
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$State;@4e98f805

我希望它显示从主函数传递到它的数组。有人能告诉我如何实现这一点吗?

可能尝试使用System.out.println状态为+Arrays.toStringinput

因为printing input相当于printing input.toString;这将打印数组的内存地址

请参见

您可以在规划类中重写toString方法,因此当您打印出规划对象时,它将打印您希望它打印的信息

差不多

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";
        }
}

要打印计划类中的一个小更改:

 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]);
            }
        }
    }

您正在打印内存地址。在数组中的元素上循环并分别打印每个元素。使用循环在数组上迭代并打印单个值…………forint i=0;iSO不是学习基本内容的捷径。在问一些无关紧要的问题之前,您至少应该阅读语言的基础知识@user3360241我并不完全同意,因为这个问题显示了一点研究工作,而且很清楚。琐碎是一个主观的词。@user3360241:很抱歉我的“琐碎”问题冒犯了你。我是一个非常新的Java程序员,并且仍在了解更多。我有C的背景,需要时间才能习惯new语言。对你来说这可能是一个小问题,但对我来说这是一个大问题。但无论如何,感谢你的输入:你能告诉我为什么投反对票吗?这是实现它的方法之一。它将打印状态是输入的许多倍。确切地说,是输入的长度倍。使用Arrays.asListinput或Arrays.toStringinput可以消除整个For循环,正如另一个答案中所建议的那样。@Roman这是正确的,但它会达到目的。我从来没有说过它是完美的,但它达到了目的。如果你不想多次打印它,那么你可以先附加到String ad,然后按你想要的方式打印它。如果你看到数组,toString Input也会有同样的实现。