java - 程序给出数字而不是*

标签 java arrays ascii java.util.scanner

我想创建一个刽子手游戏。使用一维数组。

首先获取字符串,然后将其转换为字符数组并创建一个 do while 循环。创建一个变量,假设 k 将其初始化为 0,然后如果给定字符串具有字符,则开始循环 k 将增加1.当它变成字符串循环停止的大小时。它实际上起作用了。问题是当我想显示哪个字符是真的,哪个不是*时。如果它是真的,那么字符串有它*将变成给定的char.问题是它不显示 * 和真正的字符,而是给出数字。

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

最佳答案

更改此:

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

关于java - 程序给出数字而不是*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56611621/

相关文章:

java - 用RandomAccessFile写入和读取的格式是什么

javascript - 将 javascript 数组映射到高度间隙数组

arrays - AnyObject 数组的 indexOf 不适用于字符串

delphi - 替换文件中的字符(更快的方法)

c - 在 C 中打印 ASCII

java - 在两个文件路径之间建立相对路径

java - 在 Java 中捕获(捕获)窗口中的鼠标光标

java - 使用 DoubleClick 从 WebDriver Java 选择文本

javascript - 解析没有键的多维JSON数组

unix - 检查文件是否包含某些 ASCII 字符