【问题标题】:Strange characters in array数组中的奇怪字符
【发布时间】:2015-08-07 04:27:17
【问题描述】:

当对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());
   }
}

我的输出总是这样:

开始
[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;
   }
}

据我了解,这个奇怪的词是对象的地址? 我可能错了,你能解释一下这些奇怪的字母是什么,我的代码问题在哪里。

【问题讨论】:

标签: java scramble


【解决方案1】:

为了将 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

【讨论】:

    【解决方案2】:

    如果您尝试打印 Java 对象,虚拟机会尝试调用该对象的 toString() 方法。由于 Word 没有覆盖 toString() 方法,java 将调用 Object 类的默认 toString() 实现,即:

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    

    这个方法基本上是打印对象“地址”。如果你想打印一些对用户更友好的东西,你需要重写一个 toString 方法(如果它是你的类)或手动提取你感兴趣的内容。

    【讨论】:

    • 这没有错,但在这里没有帮助,因为 OP 不会打印 Word 实例。
    【解决方案3】:

    如果要将char[] 打印为字符串,则需要手动转换,如下所示:

    public String getWord() { return new String(this.word); }
    

    【讨论】:

      猜你喜欢
      • 2013-03-12
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多