現在imは「Hangman」ゲームをJavaで作成していますが、問題が発生しました。文字列の複数の文字を異なる位置に置き換えます
static String word = JOptionPane.showInputDialog(null, "Enter word");
static String star = "";
public static Integer word_length = word.length();
public static Integer nrOfAttempts = 12;
public static Integer remainingAttempt = nrOfAttempts;
public static void main(String[] args) {
// String görs med lika många stjärnor som ordet har tecken
for (int i = 0; i < word.length(); i++) {
star += "_";
}
attempt();
}
public static void attempt(){
for(int o = 0; o < nrOfAttempts; o++) {
String attempt = JOptionPane.showInputDialog(null, "Enter first attempt");
if (attempt.length() > 1) {
JOptionPane.showMessageDialog(null, "Length of attempt can only be one character long");
attempt();
} else {
if (word.contains(attempt)) {
int attemptIndex = word.indexOf(attempt);
star = star.substring(0,attemptIndex) + attempt + star.substring(attemptIndex+1);
JOptionPane.showMessageDialog(null, "Hit!\nThe word is now:\n"+star);
nrOfAttempts++;
if (star.equals(word)) {
JOptionPane.showMessageDialog(null, "You've won!");
System.exit(0);
}
} else {
remainingAttempt--;
JOptionPane.showMessageDialog(null, "Character not present in chosen word\nRemaining Attempts: "+remainingAttempt);
}
}
}
JOptionPane.showMessageDialog(null, "Loser!");
}
私は「スター」の文字列(アンダースコアからなる単語)に特定の場所で特定の文字を置換したい場合には、それが唯一の一致する最初の文字を置き換えます。何度も繰り返し、勝つことは不可能です。
"potato"や "cool"のような単語は機能しません。
私がしたいのは、それが見ている最初のものだけでなく、すべての一致する文字を置き換えることです。配列を作成せずにこれを行うことは可能ですか?
int attemptIndex = word.indexOf(attempt);
while (attemptIndex != -1) {
star = star.substring(0, attemptIndex) + attempt + star.substring(attemptIndex + 1);
attemptIndex = word.indexOf(attempt, attemptIndex + 1);
}
をindexOf
インデックスの第二のバージョンで提供されてから検索を開始する:ここで
事は、私が唯一のアンダースコアで単語の文字を置換したいということです。これを行うには、私はインデックスを使用する必要があります – tTim
アンダースコアはcharですので、例えば '' 'replace(attempt、 '_')' '' –
ええ、その後は全てのアンダースコアが正しいものになります?私の場合、 'replace(attempt、 '_')' – tTim