Java 我正在为我的计算机编程课创建一个初级刽子手项目。我遇到了一些问题
代码尚未完成,但我遇到了一些问题。 这是我当前的代码:Java 我正在为我的计算机编程课创建一个初级刽子手项目。我遇到了一些问题,java,Java,代码尚未完成,但我遇到了一些问题。 这是我当前的代码: public class Engine { public static void main(String[] args) { String word = JOptionPane.showInputDialog("Player 1! Please enter a word."); JOptionPane.showMessageDialog(null, "Switch to Player 2. I
public class Engine
{
public static void main(String[] args)
{
String word = JOptionPane.showInputDialog("Player 1! Please enter a word.");
JOptionPane.showMessageDialog(null, "Switch to Player 2. It is time to play hangman!");
char[] letters = word.toCharArray();
String[] underscores = new String[word.length()];
for(int i=0; i<=word.length()-1; i++)
{
underscores[i]="_ ";
}
StringBuilder builder = new StringBuilder();
for (int i=0; i<word.length(); i++)
{
builder.append(underscores[i]);
}
int mistakes = 0;
while(mistakes!=7)
{
String answer = JOptionPane.showInputDialog(null, "Please guess a letter.\n" + "Mistakes = " + mistakes + " of 7!\n\n" + builder.toString() + "\n\n");
char guess = answer.charAt(0);
for(int i=0; i<=word.length()-1; i++)
{
if(guess==letters[i])
{
underscores[i] = answer;
for (int x=0; x<word.length(); x++)
{
builder.append(underscores[x]);
}
}
}
}
}
}
我遇到的问题是StringBuilder部件和.append
例如,如果单词是hat。将出现一个带有三个下划线的窗口,如下所示:
如果我猜h,那么它会变成:
__uh u_
而不是
h_uu
此外,如果我下一步猜t,它将变为:
__uh h h t
它将更改后的数组元素添加到已存在的数组中。我很确定这是由append方法引起的,但我不知道有什么替代方法。尝试StringBuilder的replace和delete方法,或者为每个猜测创建一个新的StringBuilder。StringBuilder的append方法将新文本添加到现有文本中。这就是为什么你会得到这些东西。如果使用StringBuilder是为了避免创建新的字符串对象,那么在追加文本之前,请使用delete方法清除生成器的现有文本,然后追加它
像
编辑:
您的理解是正确的,不使用StringBuilder也可以构建此游戏。请检查下面的代码
import java.util.Scanner;
class Game {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String word = null;
char[] letters;
char[] underScores;
char guess;
int found=0;
int mistake=0;
boolean present = false;
System.out.println("Enter the word");
word = s.nextLine();
letters = word.toCharArray();
underScores = new char[letters.length];
for(int i = 0; i<letters.length;i++) {
underScores[i]='_';
}
while(true) {
System.out.println("The word is");
for(int i = 0; i<letters.length;i++) {
System.out.print(underScores[i]);
}
System.out.println("\nEnter a letter");
guess= s.nextLine().charAt(0);
for(int i =0; i<letters.length;i++) {
if(guess==letters[i]) {
underScores[i]=guess;
found+=1;
present=true;
break;
}
}
if(!present) {
System.out.println("the letter is not present");
mistake+=1;
}
if(mistake >=7) {
System.out.println("too many mistakes!! sorry");
break;
}
if(found==letters.length){
System.out.println(word);
System.out.println("you have found the word!!");
break;
}
} //ending while
} //ending main
} //ending Game
您不应该附加字符串。尝试替换字符串中的字符..我不完全确定你的意思。这不是代码的功能吗?下划线[i]=答案;我使用字符串生成器是因为在JOptionPane中,只需打印数组,就可以将每个下划线放在不同的行上。我该如何使用这些?我是否会尝试删除和/或替换数组中的元素,而不是将它们添加到最后?是的,如果您选择这样做。请阅读StringBuilder上的文档,它工作了!好吧我想了解你是如何做到这一点的。我的理解正确吗?首先,使用delete方法完全擦除从旧数组保存的字符串。其次,您创建了一个for循环,其运行次数是单词长度的两倍。第三,for循环包含再次调用builder上的append方法并将下划线数组中的元素放入字符串的代码。它解决了这个问题,因为旧字符串已被删除。。不使用StringBuilder也可以完成同样的任务。我已经编辑了我的文章,给你完整的工作代码。试着去经历它。
import java.util.Scanner;
class Game {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String word = null;
char[] letters;
char[] underScores;
char guess;
int found=0;
int mistake=0;
boolean present = false;
System.out.println("Enter the word");
word = s.nextLine();
letters = word.toCharArray();
underScores = new char[letters.length];
for(int i = 0; i<letters.length;i++) {
underScores[i]='_';
}
while(true) {
System.out.println("The word is");
for(int i = 0; i<letters.length;i++) {
System.out.print(underScores[i]);
}
System.out.println("\nEnter a letter");
guess= s.nextLine().charAt(0);
for(int i =0; i<letters.length;i++) {
if(guess==letters[i]) {
underScores[i]=guess;
found+=1;
present=true;
break;
}
}
if(!present) {
System.out.println("the letter is not present");
mistake+=1;
}
if(mistake >=7) {
System.out.println("too many mistakes!! sorry");
break;
}
if(found==letters.length){
System.out.println(word);
System.out.println("you have found the word!!");
break;
}
} //ending while
} //ending main
} //ending Game