当对scramble()
方法进行测试时,它实际上会返回如下内容:
public class Scramble_game {
public static void main(String[] args)
{
System.out.println("START");
Word name = new Word("iskander");
System.out.println(name.getWord() + " " + name.getScrambleWord());
}
}
我的输出总是这样:
START
[C @ 57f530d8 [C @ 2259e205
public class Word
{
char[] word;
char[] scrambleWord;
boolean[] letters;
boolean correct;
public Word(String wordName)
{
this.word = wordName.toCharArray();
this.letters = new boolean[wordName.length()];
this.correct = false;
this.scrambleWord = this.scramble();
}
public char[] getScrambleWord(){return this.scrambleWord;}
public char[] getWord(){return this.word;}
public int getIndex()
{
Random rnd = new Random();
int i = rnd.nextInt(this.word.length);
if(this.letters[i] == true)
{
return getIndex();
}
this.letters[i] = true;
return i;
}
public char[] scramble()
{
char[] temp = new char[this.word.length];
for(int i = 0; i < this.word.length; i++)
{
char tempChar = word[this.getIndex()];
temp[i] = tempChar;
}
return temp;
}
}
据我所知,这些奇怪的单词是对象的地址? 我可能错了,你能解释一下这些奇怪的字母是什么,我的代码问题在哪里。
答案 0 :(得分:3)
如果要将char[]
打印为字符串,则需要手动转换它,如下所示:
public String getWord() { return new String(this.word); }
答案 1 :(得分:0)
如果您尝试打印Java对象,则虚拟机会尝试调用此对象的toString()
方法。由于Word没有覆盖toString()
方法,因此java将调用toString()
类的默认Object
版本,即:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
此方法基本上打印对象“地址”。如果你想打印更友好的东西,你需要覆盖toString方法(如果它是你的类)或手动提取你感兴趣的东西。
答案 2 :(得分:0)
为了将 char[] 转换为 String String.valueOf(charArray) 必须使用 toString() 方法代替,后者将返回前面提到的对象地址。
char[] customCharArray = {'m','y',' ','a','r','r','a','y'};
String requiredString = String.valueOf(customCharArray);
System.out.println(requiredString);
Output: my array