用于循环输出的Java不显示我想要的方式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了用于循环输出的Java不显示我想要的方式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2898字,纯文字阅读大概需要5分钟。
内容图文
![用于循环输出的Java不显示我想要的方式](/upload/InfoBanner/zyjiaocheng/758/31436396e34a4b28bfe2f2fa2cfb2196.jpg)
我对Java编码很陌生,而且我遇到了一个问题,这个问题在过去的几个小时里一直困扰着我.我正在创建一个非常小而简单的应用程序,它将生成一首诗.我有四个带有“名词”,“动词”,“形容词”和“副词”的数组列表.
这首诗将从每个列表中取出一个单词并将其组合成一行四行诗,每行每个单词一个单词,如下所示:
Adverbs Adjectives Nouns Verbs
Adverbs Adjectives Nouns Verbs
Adverbs Adjectives Nouns Verbs
Adverbs Adjectives Nouns Verbs
这将创造一首毫无意义的诗……无论如何..我的问题是结果如下:
public void generatePoem() {
adjectives.add("adjective1");
adjectives.add("adjective2");
adjective.add("adjective3");
adjective.add("adjective4");
nouns.add("noun1");
nouns.add("noun2");
nouns.add("noun3");
nouns.add("noun4");
verbs.add("verb1");
verbs.add("verb2");
verbs.add("verb3");
verbs.add("verb4");
adverbs.add("adverb1");
adverbs.add("adverb2");
adverbs.add("adverb3");
adverbs.add("adverb4");
String thepoem = "";
for (int i=0;i<16;i++) {
int count = i + 1;
int random = (int)(Math.random()*4);
if (count % 2 == 0) {
thepoem += adjectives.get(random).toString() + " ";
}
else if (count % 3 == 0) {
thepoem += nouns.get(random).toString() + " ";
}
else if (count % 4 == 0) {
thepoem += verbs.get(random).toString() + "\n";
}
else {
thepoem += adverbs.get(random).toString() + " ";
}
}
JOptionPane.showMessageDialog(null, thepoem);
}
}
结果是随机的,但它总是这样:
Adverb Adjective Noun Adjective(?!?!)
Adverb Adjective Noun Adjective(?!?!)
Adverb Adjective Noun Adjective(?!?!)
Adverb Adjective Noun Adjective(?!?!)
动词在哪里?
我似乎无法找到解决方案……有人请帮帮我吗?同样,我还处于Java编程的早期阶段.
解决方法:
如果count%4 == 0则计算%2 == 0.因此,您永远不会达到相应的陈述.
if (count % 2 == 0) {
}
else if (count % 4 == 0) { // <-- You will never reach this statement.
}
你应该只使用一些模4.它允许你使用switch语句.
switch (count % 4) {
case 0 :
thepoem += verbs.get(random).toString() + "\n";
break;
case 1 :
thepoem += adverbs.get(random).toString() + " ";
break;
case 2 :
thepoem += adjectives.get(random).toString() + " ";
break;
case 3 :
thepoem += nouns.get(random).toString() + " ";
break;
}
为了更进一步,使用StringBuilder而不是使用=来附加字符串也会更优雅,因为=每次创建一个带有前两个字符串副本的新字符串.
示例:
StringBuilder sb = new StringBuilder();
for (int i=0;i<16;i++) {
...
switch (count % 4) {
case 0 :
sb.append(verbs.get(random).toString() + "\n");
break;
case 1 :
sb.append(adverbs.get(random).toString() + " ");
break;
....
JOptionPane.showMessageDialog(null, sb.toString());
再远一点,
正如@IanMcLaird指出的那样,你也可以(实际上,你真的应该)在没有模数的情况下这样做(参见评论和IanMcLaird的答案).
如果我将IanMcLaird的答案与StringBuilder结合起来,那么最好的解决方案是恕我直言:
StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 4; ++i) {
sb.append(adverbs.get(random.nextInt(4)) + " ");
sb.append(adjectives.get(random.nextInt(4)) + " ");
sb.append(nouns.get((random.nextInt(4)) + " ");
sb.append(verbs.get((random.nextInt(4)) + "\n");
}
内容总结
以上是互联网集市为您收集整理的用于循环输出的Java不显示我想要的方式全部内容,希望文章能够帮你解决用于循环输出的Java不显示我想要的方式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。