我有一个字符串数组,其中包含我定义的四个元素。为什么当我输入System.out.println(name of Array)时,它不输出元素?但却给了我一个奇怪的输出。
这是我的密码…
1 2 3 4 5 6 7 8 9
| public class GeniusTrial {
public static void main (String[]args ) {
String [] genius = {"Einstein,", "Newton,", "Copernicus,", "Kepler."};
System. out. print(genius );
}
} |
下面是我得到的输出:
号
- @安东尼,这对一个新用户没什么帮助……你很粗鲁,没有给他最好的答案。现在使用你所学的关于Arrays类的知识。
- @保罗,他在做作业。大概是他的老师教过他打圈。他应该利用所学来完成他的任务。捷径可能是有益的,但学习基础知识是他应该做的。
- @安东尼…捷径?它是核心Java库的一部分——知道API不是一个快捷方式。我不想知道他的老师教了他什么……这甚至可能不是家庭作业。也许他是在自学。
- @保罗,他给它贴上了家庭作业标签。如果他使用这个标签比正常情况下更自由一点,那就顺其自然吧。循环是基础。下一步是抽象掉循环。我假设在他学习的这一点上,他仍然在学习基本原理。如果你有不同的感觉,很好。
- stackoverflow.com/questions/3319510/…,stackoverflow.com/questions/409784/…,stackoverflow.com/questions/4297361/…
- 看看数组。toStand(Obj[])DOCS.Oracle .COM/JavaSe/1.5.0/DOCS/API/Java/UTL/Helip;
数组的toString()方法返回描述数组标识而不是其内容的String。这是因为数组不会覆盖Object.toString(),其文档解释了您看到的内容:
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:
1
| getClass (). getName() + '@' + Integer. toHexString(hashCode ()) |
号
要获得数组内容的String表示,可以使用Arrays.toString(Object[])。
此方法返回的String由每个元素的toString()表示组成,按它们在数组中出现的顺序排列,并用方括号括起来("[]")。相邻元素用逗号和空格分隔(",")。
例如,对数组调用此方法将导致以下String:
1
| "[Einstein, , Newton, , Copernicus, , Kepler.]" |
号
请注意,由于数组元素String中已经有标点符号和空格,因此会产生双逗号和奇数间距。删除那些:
1
| String [] genius = {"Einstein", "Newton", "Copernicus", "Kepler"}; |
然后,该方法将返回该String:
1
| "[Einstein, Newton, Copernicus, Kepler]" |
。
重要的是要注意,使用这个方法并不能对生成的String的格式进行任何控制。它很适合快速检查数组的内容,但是它的局限性超出了这个目的。例如,如果不希望使用方括号括起来,或者希望逐行列出每个元素,该怎么办?
此时,您应该开始看到实现自己的方法以特定于任务的方式输出数组内容的价值。正如其他人所建议的,通过使用for循环并构建您想要输出的新结果String,来实践这一点。
在Java教程文章中,您可以找到更多关于EDCOX1和0个循环的信息。一般来说,Java教程对于初学者来说是一个很好的阅读工具,应该很好地配合你的课程。
- 假设我想要不同的格式。我有什么选择?
- @AnthonyPegram——当然,您需要滚动自己的实现。你建议我编辑我的答案来提到这一点吗?
- 我认为值得一提的是,如果使用所提到的方法,请记住用户正在学习,以及如果该格式不有用,该怎么做,这可能只会导致回答的第二部分。
- @对了,让我改进一下。
- @如果你看到任何可以进一步改进的地方,请告诉我。顺便说一句,我理解你在上述评论中的观点,并感谢你有必要把这样的帖子变成教育性的而不是填鸭式的。谢谢你给我一个更好的答案:)
- 喜欢,加1。
- +1,很好的解释
使用Arrays类为您扩展数组:
。
会给你的
[Einstein,,Newton,,Copernicus,,Kepler.]
号
双逗号是因为您在数组中包含了它们;删除它们,您将得到一个很好的逗号分隔列表。
- 是的,一般比较好的方法,但不经常"作业"兼容;-)向上投票赞成提到双逗号。
- 假设我想要不同的格式。我有什么选择?
- @如果是我,我可以使用通用语言的join方法,或者在循环中使用StringBuilder,这取决于我正在处理的项目中是否已经使用了通用语言……以及格式要求。
所以在你的for循环中会是这样的:
1 2 3
| for(i=0;i<genius.length;i++) {
system.out.print(genius[i]);
} |
。
所以我会解释这是怎么回事。for循环的结构如下:
1
| for(original value; condition for the variable to go through the for loop; what to do to variable at end of for loop) |
所以从i=0开始,这就满足了条件:i小于genius.length(genius.length给出了数组的长度,在本例中是4)。所以它将通过循环并打印genius[i](即genius[0]),因为i=0。然后它会给我加一个(i++)。
它将再次通过循环,因为i=1填充条件i小于genius.length…..等等……
它会转到i=4,然后停止。你可能会想,天才呢??数组数据的命名如下:1st=arrayname[0],2nd=arrayname[1]……所以第四个就是天才。所以当i=4时,它停止并全部打印。
您可以通过替换为更改其打印格式system.out.print(genius[i]+",");这将在每一个后面加上逗号和空格。
希望有帮助,祝你好运。
- +我解释得很好,啊,我认为他在课堂上没有太多的注意力。
使用增强的for循环迭代,如下所示
你需要一个循环:
每个对象都有一个toString()方法,这就是您看到的,字符串数组的toString。
您需要对数组进行迭代(例如使用for循环),并分别打印每个值。
如果您尝试打印一个数组,它将打印您不会真正感兴趣的对象的信息。