另一个'for循环'中的'for循环'无效

时间:2015-07-28 10:49:28

标签: java eclipse for-loop nested-loops

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。

5 个答案:

答案 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)确保消息长度短于关键字的预期行为,反之亦然。