我想创建一个刽子手游戏。使用一维数组。
首先获取字符串,然后将其转换为字符数组并创建一个 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/