为什么每次字母出现在单词中时都会打印
why does it print for each time the letter appears in the word
为什么字母中的每个e打印4次?似乎无法思考为什么要这样做。提示会很有帮助。
randW
是一个随机的 12 个字符的单词形成一个文本文件。
private char guess;
private String randW;
private int randNum;
private StringBuilder hiddenW = new StringBuilder("............");
void play() {
for (int i = 0; i < 10; i++) {
System.out.println("Geef de letter die je wilt raden: ");
guess = sc.nextLine().toUpperCase().charAt(0);
for (int ii = 0; ii < randW.length(); ii++) {
if (guess == randW.charAt(ii)) {
hiddenW.setCharAt(ii, guess);
System.out.println(hiddenW);
System.out.println("Aantal fouten: " + wrongG);
}
}
}
}
随机词是GERESTOREERD
This is the Output
Geef de letter die je wilt raden: GERESTOREERD
e // user input is e
.E..........
.E.E........
.E.E....E...
.E.E....EE..
Geef de letter die je wilt raden: GERESTOREERD
r // user input is r
.ERE....EE..
.ERE...REE..
.ERE...REER.
Geef de letter die je wilt raden: GERESTOREERD
我了解到您希望每次猜测都输出一行。为此,只需将打印行移到内部循环之外。如果只想在至少找到一个字母时打印,请使用标志:
void play() {
for (int i = 0; i < 10; i++) {
System.out.println("Geef de letter die je wilt raden: ");
guess = sc.nextLine().toUpperCase().charAt(0);
boolean hit = false;
for (int ii = 0; ii < randW.length(); ii++) {
if (guess == randW.charAt(ii)) {
hiddenW.setCharAt(ii, guess);
hit = true;
}
}
if (hit) {
System.out.println(hiddenW);
System.out.println("Aantal fouten: " + wrongG);
}
}
}
看看第二次猜测后的输出,你会发现一个简单的模式:
'e'出现4次,目前猜出的单词打印4次,'r'出现3次,打印3次。并且随着每一次印刷,这个词的另一个特征被揭示出来。
原因是这段代码:
for (int ii = 0; ii < randW.length(); ii++) {
if (guess == randW.charAt(ii)) {
hiddenW.setCharAt(ii, guess);
System.out.println(hiddenW);
System.out.println("Aantal fouten: " + wrongG);//the printed line
}
}
每次找到与猜测的字符匹配的字符时,都会更新缓冲区并打印新猜出的单词。但是对于每个找到的字符一次,因为它在更新缓冲区的同一个块内。将 print-command 移出循环,一切正常:
for (int ii = 0; ii < randW.length(); ii++) {
if (guess == randW.charAt(ii)) {
hiddenW.setCharAt(ii, guess);
}
}
System.out.println(hiddenW);
System.out.println("Aantal fouten: " + wrongG);
为什么字母中的每个e打印4次?似乎无法思考为什么要这样做。提示会很有帮助。
randW
是一个随机的 12 个字符的单词形成一个文本文件。
private char guess;
private String randW;
private int randNum;
private StringBuilder hiddenW = new StringBuilder("............");
void play() {
for (int i = 0; i < 10; i++) {
System.out.println("Geef de letter die je wilt raden: ");
guess = sc.nextLine().toUpperCase().charAt(0);
for (int ii = 0; ii < randW.length(); ii++) {
if (guess == randW.charAt(ii)) {
hiddenW.setCharAt(ii, guess);
System.out.println(hiddenW);
System.out.println("Aantal fouten: " + wrongG);
}
}
}
}
随机词是GERESTOREERD
This is the Output
Geef de letter die je wilt raden: GERESTOREERD
e // user input is e
.E..........
.E.E........
.E.E....E...
.E.E....EE..
Geef de letter die je wilt raden: GERESTOREERD
r // user input is r
.ERE....EE..
.ERE...REE..
.ERE...REER.
Geef de letter die je wilt raden: GERESTOREERD
我了解到您希望每次猜测都输出一行。为此,只需将打印行移到内部循环之外。如果只想在至少找到一个字母时打印,请使用标志:
void play() {
for (int i = 0; i < 10; i++) {
System.out.println("Geef de letter die je wilt raden: ");
guess = sc.nextLine().toUpperCase().charAt(0);
boolean hit = false;
for (int ii = 0; ii < randW.length(); ii++) {
if (guess == randW.charAt(ii)) {
hiddenW.setCharAt(ii, guess);
hit = true;
}
}
if (hit) {
System.out.println(hiddenW);
System.out.println("Aantal fouten: " + wrongG);
}
}
}
看看第二次猜测后的输出,你会发现一个简单的模式:
'e'出现4次,目前猜出的单词打印4次,'r'出现3次,打印3次。并且随着每一次印刷,这个词的另一个特征被揭示出来。
原因是这段代码:
for (int ii = 0; ii < randW.length(); ii++) {
if (guess == randW.charAt(ii)) {
hiddenW.setCharAt(ii, guess);
System.out.println(hiddenW);
System.out.println("Aantal fouten: " + wrongG);//the printed line
}
}
每次找到与猜测的字符匹配的字符时,都会更新缓冲区并打印新猜出的单词。但是对于每个找到的字符一次,因为它在更新缓冲区的同一个块内。将 print-command 移出循环,一切正常:
for (int ii = 0; ii < randW.length(); ii++) {
if (guess == randW.charAt(ii)) {
hiddenW.setCharAt(ii, guess);
}
}
System.out.println(hiddenW);
System.out.println("Aantal fouten: " + wrongG);