2015-10-17 10 views
1

Я почти закончил свою игру Hangman, но у меня возникла проблема с заменой правильно обозначенных букв «подчеркивания» этими буквами. Когда я выбираю правильную букву, создается бесконечный цикл. Любая помощь приветствуется.Hangman Java - замена поддеревьев

// public String phrase;

// public String newMask;

public boolean showLetter(String letter) 
{ 
    phrase = phrase.toUpperCase(); 

    int pos = phrase.indexOf(letter); 
    if(pos != -1) { //If the letter is part of the phrase. 
     do { 
      //Letter and phrase don't change. 
      //Cut the "a" 

      pos = phrase.indexOf(letter); 
      //Make a new string and take the digit out. 
      //I must break out of the loop. 
      //add code here 

      newMask = phrase.substring(0,pos)+phrase.charAt(pos)+phrase.substring(pos); 

     } while (pos != -1); 
     setValue(mask); 
    } else { 
     return false; 
    } 
    return true; 
} 
+0

Почему это НЕ будет создавать бесконечные петли ??? 'letter' всегда будет внутри цикла. Следовательно, 'pos' не будет изменен. Тогда как управление выйдет из цикла? Не понимаю, что такое использование цикла? – Rehman

+0

Использование цикла - это заменить все необходимые символы подчеркивания правильными буквами. Например, потому что буква «Все хорошо, что хорошо заканчивается!», Если я выбираю «e», все символы подчеркивания, которые представляют «e», меняются на e. Вы знаете, как я могу это сделать? –

+0

Не можете использовать метод String 'replace()'? – Rehman

ответ

0

Эй томми я сделал подобный метод, когда и вошел в письмо будет проверять, если его в фразе String, и если его в этом, он возвращает истину, и распечатать новую маску.

static String phrase = "Word"; 
static String mask = "_ _ _ _"; 
public boolean showLetter(String letter) 
{  
    phrase = phrase.toUpperCase(); 
    for(int v =0; v < phrase.length();v++){ 
     if(phrase.charAt(v) == letter.toUpperCase().charAt(0)){     
      String newMask = ""; 
      mask =mask.replace(" ", ""); 
      for(int vv = 0;vv < mask.length(); vv++){      
       if(vv == v){ 
        newMask = newMask + letter.charAt(0) + " " ; 
       }else if (mask.charAt(vv) != '_'){ 
        newMask = newMask +mask.charAt(vv) + " "; 
       }else{ 
        newMask = newMask + "_ "; 
       } 
      } 
      mask = newMask; 
      return true; 
     }    
    } 
    return false; 
} 

Входной сигнал: "ш"

Выход: Правда, "ш _ _ _"

если вы не хотите, чтобы распечатать выходной поставить "//" перед System.out .println (маска);

Смежные вопросы