Программа дает цифры вместо * - PullRequest
0 голосов
/ 15 июня 2019

Я хочу создать игру палача. Использование одномерного массива.

. Сначала нужно получить строку, затем превратить ее в массив char и создать цикл do while. Я создал переменную let say kiинициализирует его до 0, после чего цикл запускается, если заданная строка имеет символ k, будет увеличен на 1. Когда он станет размером остановки цикла строки. Это работает на самом деле. Проблема в том, когда я хочу показать, какой символ является истинными который не равен *. Если это правда, поэтому строка имеет его * превратится в данный символ. Проблема в том, что он показывает * и истинный символ вместо этого дает числа.

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    String[] words = {"monkey","donkey","konkey","funkey","bonkey"};
    Scanner input = new Scanner(System.in);
    //random string from string array
    String str = randomString(words);
    //change string array to char array
    char[] word = str.toCharArray();

    int size = 0;


    boolean k = true;
    //Create the char array

    char[] array = new char[str.length()];
    //fill it with *
    for(int i = 0 ; i < str.length() ; i++) {
        array[i] ='*';
    }
    //check if given char is in the string
    do {
        System.out.print("enter the char");
        char given = input.next().charAt(0);
        for(int i = 0 ; i < word.length ; i++) {

            if(word[i] == given) {

                size++;
                char g = given;
                array[i] = g;

            }

            if(size == str.length()){
                k = false;
            }

            for(int e:array) {
                System.out.print(e);
            }

            }

    }while(k);

}//create randomString
  public static String randomString(String[] str) {

    int k =(int) (Math.random() * str.length);

    String strk = str[k];

    return strk;
}

1 Ответ

0 голосов
/ 15 июня 2019

Изменить это:

for(int e:array) {
   System.out.print(e);
}

к этому:

for(char e:array) {
   System.out.print(e);
}

вы неявно приводите char к int, которые печатаются как числа, а не как символы.

Ваш код имеет много недостатков, это исправленная версия:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String[] words = {"monkey","donkey","konkey","funkey","bonkey"};
    Scanner input = new Scanner(System.in);
    //random string from string array
    String str = randomString(words);
    //change string array to char array
    char[] word = str.toCharArray();

    System.out.println("Picked " + str);
    int size = 0;

    boolean k = true;
    //Create the char array

    char[] array = new char[str.length()];
    //fill it with *
    for(int i = 0 ; i < str.length() ; i++) {
        array[i] ='*';
    }
    //check if given char is in the string
    do {
        System.out.print("enter the char: ");
        char given = input.next().charAt(0);
        for(int i = 0 ; i < word.length ; i++) {
            if(word[i] == given) {
                char g = given;
                //Check if the array[i] has been already replaced
                //If not increase the size
                if(array[i] == '*') size++;
                array[i] = g;
            }

            if(size == str.length()){
                k = false;
            }
        }

        for(char e:array) {
            System.out.print(e);
        }
        System.out.println();

    }while(k);
}

public static String randomString(String[] str) {

    int k = (int) (Math.random() * str.length);

    String strk = str[k];

    return strk;
}

Вывод на консоль:

enter the char: k
***k**
enter the char: d
***k**
enter the char: o
*o*k**
enter the char: n
*onk**
enter the char: k
*onk**
enter the char: e
*onke*
enter the char: y
*onkey
enter the char: m
monkey
...