所以我有这个代码应该生成用户根据这些条件决定的长度的随机单词:
if (*str != 'g' && *str != 'G') {
我克服了第一部分条件,第二部分条件需要一些编辑。
我使用if语句检查[1] Every other letter is a random vowel (letter + vowel + letter + vowel...etc)
[2] Two vowels cannot meet together (ie: bout, caravaa)
或letter1
是否恰好是元音,如果是true,则生成不同的字母。问题是那些新生成的字母有可能成为元音。我如何继续重复if语句,直到它为假? letter2
(Letter1 and Letter2 are not vowels)
答案 0 :(得分:1)
您提到了两个标准。但是,即使用if
替换while
,代码也无法满足它们。
我修改了您的代码,以便它可以满足您的条件。我想指出下面的主要内容:
您正尝试一次打印3个字母。这意味着输入应为3的倍数,否则程序将失败。我建议你一次打印一封信。
您的需求为letter + vowel + letter + vowel...
,但您正在打印letter + vowel + letter + letter + vowel + letter...
。相反,我建议保留一个boolean
变量并在每个回合中进行更改,检查它是否是元音或辅音,然后在他们自己的代码块中进行相应的工作。
以异常结束程序是一种不好的做法。这就是我添加try-catch
并将输入包装在其中的原因。
为了使您的代码更方便,Carcigenicate在this comment - &#34;提供功能或设置并检查会员资格&#34; < / em>的。我建议你为元音制作另一个辅音阵列,因为你为元音做了一个随机选择。
Here是ideone中的修改代码。以下是您的代码版本:
import java.util.Random;
/* Name of the class has to be "Main" only if the class is public. */
class NickName_1
{
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
java.util.Scanner scanner = new java.util.Scanner(System.in);
int letterNum = 6;
Random rn = new Random();
char letter = (char) (rn.nextInt(26) + 'a');
boolean shouldCons = true;
char[] vowels = { 'a', 'e', 'i', 'o', 'u' };
while (true)
{
//Ask user for word's length and store it
System.out.println();
System.out.print("Please enter the length of the word in letters: ");
try{
letterNum = scanner.nextInt();
}catch(Exception e){
break;
}
for (int i = 0; i < letterNum; i++, shouldCons^=true)
{
if(shouldCons) {
letter = (char) (rn.nextInt(26) + 'a');
while (letter == 'a' || letter == 'u' || letter == 'i' || letter == 'e' || letter == 'o')
{
letter = (char) (rn.nextInt(26) + 'a');
}
}
else letter = vowels[(int)(Math.random() * 5)];
System.out.print(letter);
}
}
}
}
答案 1 :(得分:0)
只需用while语句替换if语句。
while (letter1 == 'a' || letter1 == 'u' || letter1 == 'i' || letter1 == 'e' || letter1 == 'o' ||
letter2 == 'a' || letter2 == 'u' || letter2 == 'i' || letter2 == 'e' || letter2 == 'o')
{
letter1 = (char) (rn.nextInt(26) + 'a');
letter2 = (char) (rn.nextInt(26) + 'a');
}
更新
查看你的代码,分别检查每个字母会好得多,否则letter1可能会获得辅音,但因为字母2不是它继续改变它们。
while (letter1 == 'a' || letter1 == 'u' || letter1 == 'i' || letter1 == 'e' || letter1 == 'o')
{
letter1 = (char) (rn.nextInt(26) + 'a');
}
while (letter2 == 'a' || letter2 == 'u' || letter2 == 'i' || letter2 == 'e' || letter2 == 'o')
{
letter2 = (char) (rn.nextInt(26) + 'a');
}