for (int i=0; i<Intlength; i++){
int intPosition;
intPosition=strAlphabet.indexOf(strMessage.charAt(i));
System.out.println(intPosition);
System.out.println("BREAK");
for (int k=0; k<Intlength2; k++){
int intPosition2;
intPosition2=strAlphabet.indexOf(strKeyword.charAt(k));
System.out.println(intPosition2);
System.out.println("BREAK-------------");
}
}
我会要求用户输入两个单词。一个是消息,一个是关键字。
上面的第一个循环将检查是否我 将添加1,并打印出第一个字母位置编号。例如,如果消息是“红色”。我首先想要它输出位置编号“r”,即17.然后它继续移动到第二个循环,并对关键字执行完全相同的操作。例如,如果关键字是“cat”,我希望它打印第一个字母的第一个字母位置,在这种情况下,“c”的位置值为2.这样我希望输出是这样的:
消息的第一个字母位置
关键字的第一个字母位置
消息的第二个字母位置
关键字的第二个字母位置
等
因此坚持消息“red”和关键字“cat”我希望输出如下:
17
2
4
0
3
19
我添加了中断文本,以区分发生在编码中的内容,这就是结果。
Please give me a message:
red
Thank you! Now please give me a keyword:
cat
17
BREAK
2
BREAK-------------
0
BREAK-------------
19
BREAK-------------
4
BREAK
2
BREAK-------------
0
BREAK-------------
19
BREAK-------------
3
BREAK
2
BREAK-------------
0
BREAK-------------
19
BREAK-------------
你可以看到它输出了消息的第一个字母位置,然后是关键字的所有三个位置,然后转到消息的第二个位置字母,然后再次输出关键字的所有三个位置值。 我如何解决这个问题以获得我想要的输出,我确信我没有正确地编写forloop。
答案 0 :(得分:5)
你得到的是嵌套for循环,使它做你建议他们只需要一个接一个,而不是互相嵌套。当您将第二个for循环放在第一个循环内部时,您要告诉它要在消息中的每个字母的关键字中打印每个字母。
你想要的是这样的循环(如果一个字符串比另一个字符串长,我不清楚你想要它做什么,我假设你希望它用较短的字符串停止,但你可以改变它。)< / p>
if(strMessage.length > keyword.length){
intLength = keyword.length;
} else {
intLength = strMessage.length;
}
for (int i=0; i<intLength; i++){
//Print the position of the i'th letter of the message
int intPosition;
intPosition=strAlphabet.indexOf(strMessage.charAt(i));
System.out.println(intPosition);
//Print the position of the i'th letter of the keyword
int intPosition2;
intPosition2=strAlphabet.indexOf(strKeyword.charAt(i));
System.out.println(intPosition2);
}
答案 1 :(得分:3)
当您嵌套循环时,对于外循环的每次迭代,内部循环将从头到尾执行。
你可能需要这样的东西(注意只有一个循环):
for (int i=0; i < Math.max(strMessage.length, keyword.length); i++){
if (i < strMessage.length) {
System.out.println(strAlphabet.indexOf(strMessage.charAt(i)));
} else {
// To be defined
}
if (i < strKeyword.length) {
System.out.println(strAlphabet.indexOf(strKeyword.charAt(i)));
} else {
// To be defined
}
}
(注意:未经测试,未编译)
答案 2 :(得分:1)
如果你违反了要求,你就会知道你有直接的功能,可以从你的两个字符串中取一个给定索引的字符。
所以你只需要单一循环。在里面你可以从第一个字符串然后从第二个字符串中获取字符。
注意:您需要处理两个字符串的长度。根据它,您可以从中获取角色。
答案 3 :(得分:1)
没有IF else阻止的另一种方法
for (int i=0; i<Math.max(strMessage.length, keyword.length);i++){
int intPosition;
try{
intPosition=strAlphabet.indexOf(strMessage.charAt(i));
System.out.println(intPosition);
}catch(Exception e){
}
try{
intPosition=strAlphabet.indexOf(strKeyword.charAt(i));
System.out.println(intPosition);
}catch(Exception e){
}
}
答案 4 :(得分:1)
String strAlphabet="ABCDEFGHIJKLMNOPQRSTUWXYZ";
String strMessage="red".toUpperCase();
String strKeyword="cat".toUpperCase();
int Intlength=strMessage.length();
int Intlength2=strKeyword.length();
for (int i=0; (i<Intlength) || (i<Intlength2); i++){
int intPosition=strAlphabet.indexOf(strMessage.charAt(i));
System.out.println(intPosition);
int intPosition2=strAlphabet.indexOf(strKeyword.charAt(i));
System.out.println(intPosition2);
}
1)使比较不区分大小写。不要确定用户在输入单词时会处理案件 2)确保消息长度短于关键字的预期行为,反之亦然。