【问题标题】:Why doesnt my program print the data it receives instead of the address?为什么我的程序不打印它收到的数据而不是地址?
【发布时间】:2015-07-22 14:11:17
【问题描述】:

我创建了一个包含两个类的 java 程序。一个类(Main)包含传递给第二个类(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$State;@4e98f805

我希望它显示从主函数传递给它的数组。有人可以告诉我如何实现这一目标吗?

【问题讨论】:

  • 您正在打印内存地址。循环遍历数组中的元素并单独打印出每个元素。
  • 使用循环遍历数组并打印单个值.......................... for( int i=0;i
  • SO 不是学习基础知识的捷径。在问一些琐碎的问题之前,您至少应该阅读语言基础知识。
  • @user3360241 我不同意(完全),只要问题表明研究工作量很小并且很清楚。 “琐碎”是一个主观词。
  • @user3360241:很抱歉我的“琐碎”问题冒犯了您。我是一个非常新的 Java 程序员,并且仍然对它有更多的了解。我有 C 的背景,需要时间来适应一门新语言。对你来说这可能是微不足道的,但对我来说这是一个大问题。但无论如何感谢你的输入:)

标签: java arrays output tostring


【解决方案1】:

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

因为打印 input 等价于打印 input.toString();这会打印数组的内存地址。

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

【讨论】:

    【解决方案2】:

    您可以在Planning 类中覆盖toString() 方法,因此当您打印出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";
            }
    }
    

    【讨论】:

      【解决方案3】:

      仅打印您的 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]);
                  }
              }
          }
      

      【讨论】:

      • 你能分享一下为什么投反对票吗?这是实现它的方法之一
      • 它将打印The state is 很多次(确切地说是input.length 次)。正如另一个答案中所建议的,整个for 循环可以通过使用Arrays.asList(input)Arrays.toString(input) 来消除。
      • @Roman 这是真的,但它会达到目的。我从未说过它是完美的,但它可以达到目的。如果您不想多次打印,则可以先附加到字符串广告,然后按您想要的方式打印。如果您会看到 Arrays.toString(input) 也将具有相同的实现。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多