数组和Java字符串错误:[Ljava.lang.String; @ 19c42c4b

时间:2013-10-20 13:23:49

标签: java arrays string

我创建了一个程序,允许用户输入日记条目(最多7天),然后允许一个人在输入条目后的其中一天内调用。不幸的是,这给我留下了一些我不熟悉的奇怪的字符串错误。

代码如下:

public class eDiary{
public static void main (String args[]){
    int[] days = new int[7];//get our days
    days[0] = 1;//start with 1 and not 0
    days[1] = 2;
    days[2] = 3;
    days[3] = 4;
    days[4] = 5;
    days[5] = 6;
    days[6] = 7;
    String [] events = new String[7];//events for the days
    int i = 0;

    //asks for input and counts
   for(i=0; i<7; i++){
    String event = Console.readString("Tell me the major event of day " + days[i] + "\n");
    events[i] = event; 

}

 int journal_entry = Console.readInt("Enter what day you want to hear or Enter 0 to stop \n");
 while (journal_entry != 0) { 
     System.out.println(events);
     journal_entry = Console.readInt("Enter what day you want to hear or Enter 0 to stop \n");   
    //get r dun!

输入和输出:

Tell me the major event of day 1
one
Tell me the major event of day 2
two
Tell me the major event of day 3
thre
Tell me the major event of day 4
four
Tell me the major event of day 5
five
Tell me the major event of day 6
six
Tell me the major event of day 7
seven
Enter what day you want to hear or Enter 0 to stop 
1
[Ljava.lang.String;@10181f5b
Enter what day you want to hear or Enter 0 to stop 
0
你好,你们好!

非常感谢您的快速回复。现在似乎要做的一件事是更换

System.out.println(events);

System.out.println(events[journal_entry]);

现在给我输入如下:

Tell me the major event of day 1 
first day
Tell me the major event of day 2
second day
Tell me the major event of day 3
third day
Tell me the major event of day 4
fourth day
Tell me the major event of day 5
fifth day
Tell me the major event of day 6
sixth day
Tell me the major event of day 7
seventh day
Enter what day you want to hear or Enter 0 to stop 
1//the day im asking for
second day//spitting out the next day's entry instead of the first day's entry
Enter what day you want to hear or Enter 0 to stop 
0//this is me stopping it

8 个答案:

答案 0 :(得分:9)

这不是错误。

System.out.println(events);

在这一行中,你试图打印数组,该语句不打印数组内容,它只打印对象类名后跟哈希码。

要打印您必须使用的阵列内容

System.out.println(Arrays.toString(events));

或者,如果需要,循环遍历数组并打印其值

答案 1 :(得分:4)

[Ljava.lang.String;@10181f5b内容是您明确或隐式调用Object.toString()并且目标对象的类不会覆盖toString()时获得的内容。在这种情况下,问题是Java数组类型不会覆盖toString()

如果要输出数组,请使用java.util.Arrays.toString(...)将其转换为String,然后输出。

但在这种情况下,您实际上需要输出特定的条目,而不是整个数组。修复是改变

    System.out.println(events);

    System.out.println(events[journal_entry]);

对于记录,上面的内容包括类内部名称(“[Ljava.lang.String;”)和对象的标识哈希码(十六进制)。

这不是一个“奇怪的错误字符串”。

答案 2 :(得分:2)

您获得的输出是因为:

在Java中,每个对象都有toString()方法,默认显示类名表示,然后添加@,然后添加哈希码。

您应该使用已Arrays#toString()实施的this way

3860     public static String toString(int[] a) { {
3861        if (a == null)
3862            return "null";
3863        int iMax = a.length - 1;
3864        if (iMax == -1)
3865            return "[]";
3866
3867        StringBuilder b = new StringBuilder();
3868        b.append('[');
3869        for (int i = 0; ; i++) {
3870            b.append(a[i]);
3871            if (i == iMax)
3872                return b.append(']').toString();
3873            b.append(", ");
3874        }
3875    }

这将有助于您更好地理解数组。

当然,你可以在数组上手动循环并打印它:

for(String event: events) {
    System.out.println(event);
}

答案 3 :(得分:0)

没有错,这不是错误信息。

相反,它是数组的字符串表示形式。考虑这一行:

System.out.println(events);

您正在打印整个数组,因此您可以获得该表示 - 这确实有点难看。您只想打印一个元素,即与所选日期对应的元素。使用:

System.out.println(events[journal_entry]);

执行绑定检查。

答案 4 :(得分:0)

这不是错误。您想要打印变量事件的值。 [Ljava.lang.String;@10181f5b表示事件是 java.lang.String 类型的数组, 10181f5b 是此变量的哈希码。你想要打印的是event [i],其中i是一天的数字。

答案 5 :(得分:0)

在java数组中被视为对象。您正在打印不是您想要的事件数组对象。

您需要在一周内打印当天的名字。你需要替换

 System.out.println(events);

 System.out.println(events[journal_entry]);

答案 6 :(得分:0)

它不会正确打印出答案,因为您只是将System.out.println()指向应该是数组指针而不是实际变量的事件。你应该用

替换这一行
System.out.println(events[journal_entry]);

让它变得有意义。使用conmmand运行它,看看它是否能正常运行。

答案 7 :(得分:0)

感谢所有回复!我能够解决这个问题。如果有人好奇,这是代码:

public static void main (String args[]){
int[] days = new int[7];//get our days
days[0] = 1;//start with 1 and not 0
days[1] = 2;
days[2] = 3;
days[3] = 4;
days[4] = 5;
days[5] = 6;
days[6] = 7;
String [] events = new String[7];//events for the days
int i = 0;

//asks for input and counts


for(i=0; i<7; i++){
String event = Console.readString("Tell me the major event of day " + days[i] + "\n");
events[i] = event; 

int journal_entry = Console.readInt(“输入您想要听到的日期或输入0以停止\ n”);  while(journal_entry!= 0){      System.out.println(“On day”+ days [i = 0] +“”+ events [journal_entry - 1]);      journal_entry = Console.readInt(“输入您想要听到的日期或输入0以停止\ n”);