2015-07-28 2 views
2
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-------------"); 
    } 
} 

Я попрошу пользователя ввести два слова. один - это сообщение, а одно - ключевое слово.My 'for loop' внутри другого 'for loop' не работает

Первый цикл выше проверяет, что если i добавит 1 и распечатает первый номер позиции букв. например, если сообщение было «красным». я бы сначала хотел, чтобы он выдал номер позиции «r», который равен 17. затем он переместится во второй цикл и сделает то же самое для ключевого слова. например, если ключевое слово было «cat», я бы хотел, чтобы он печатал первую буквенную позицию первой буквы, в этом случае «c» имеет значение позиции 2. Таким образом, я хочу, чтобы выход был таким:

  • первая буква позиция сообщения

  • первая буква положение ключевого слова

  • второе письмо позиция сообщения

  • второе письмо положение ключевого слова

т.д.

поэтому прилипание к сообщению «красный» и ключевое слово «кот» я хотел бы вывод, как, например:

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------------- 

, как вы можете видеть, что putputs первой буквы позиции сообщения, то все три позиций ключевого слова, и идет на вторую позиции буквы сообщения затем снова выводя все три значения позиции ключевого слова. Как я могу исправить это, чтобы получить вывод, который я хочу, я уверен, что я не правильно пишу на прелюдии.

+3

Если вы хотите получить 1 письмо от каждого источника, вам понадобится только ** один ** цикл –

+0

Можете ли вы добавить полный код в свои циклы 'for'? Оба ваших цикла не закрыты. – Karthik

+1

Сначала исправьте свой пример кода. Отсутствуют скользящие скобки, а отступы выходят. – dhke

ответ

5

То, что у вас есть, вложено для циклов, чтобы заставить его делать то, что вы предложили, просто нужно быть одним за другим, а не вложенным внутри друг друга. Когда вы ставите второй цикл в первом, что вы говорите ему, нужно напечатать каждую букву в ключевом слове для каждой буквы в сообщении.

То, что вы хотите, это цикл, подобный этому (непонятно, что вы хотите, если одна строка длиннее другой, я предполагаю, что вы хотите, чтобы она остановилась на более короткой строке, но вы можете это изменить).

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); 

} 
+0

Вторая часть, вы объявили букву k, однако это не было указано выше, и поэтому письмо k недействительно – superstar

+0

исправлено, спасибо. –

+0

Это исправило проблему, спасибо – superstar

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 
    } 
} 

(NB: не тестировалось, не компилируется)

1

Если вы нарушите ваше требование, вы получите знать что у вас есть прямолинейная функциональность для взятия символа по заданному индексу из вашей строки.

Для этого вам понадобится только для петли. Внутри вы можете взять символ из первой строки, а затем из второй строки.

Примечание: Вам необходимо позаботиться о длине обеих струн. В зависимости от этого вы можете получить от него символ.

1

Другой подход без IF еще блок

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){ 
    } 
} 
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) Обеспечить ожидаемое поведение в случае, если длина сообщения короче ключевого слова или наоборот.