为什么每次字母出现在单词

时间:2016-01-14 22:24:58

标签: java stringbuilder

为什么在信中每个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

2 个答案:

答案 0 :(得分:0)

我认为你想为每个猜测输出一行输出。为此,只需将打印线移到内环外。如果您只想在找到至少一个字母时打印,请使用标记:

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

答案 1 :(得分:0)

在第二次猜测后看看输出,你会发现一个简单的模式:
'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);