我创建了一个程序,允许用户输入日记条目(最多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
答案 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”);