java不显示输出内容_用于循环输出的Java不显示我想要的方式

我对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) { //

}

你应该只使用一些模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

来源: https://codeday.me/bug/20190716/1478233.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值