2016-11-12 55 views
0

你好我嘗試做一個字母猜謎遊戲有3個隨機字母,當我嘗試使用下面的代碼它總是返回一個int到其他程序波紋管我嘗試接受它作爲一個字母來獲得一個值,但可以」弄明白了。Interger正在通過,但期望的Char值?

import java.util.Random; 

public class CodeLetter { 
private char letterValue;  
int count = 8; 
Random rnd = new Random(); 


public char codeLetter(){ 

letterValue = (char)(rnd.nextInt(5)+'A'); 
System.out.println(letterValue); 
return letterValue; 


} 

} 

調用使用線

letter1 = codeLetter.codeLetter(); 

上面的代碼但一旦它被打印到屏幕它仍持有一個int值,而不是字符的代碼。 此程序需要兩個類的質量要求

public class CodeBreaker { 
    private char letter1; 
    private char letter2; 
    private char letter3; 

    CodeLetter codeLetter = new CodeLetter(); 


    public void CodeBreaker(){ 
     //Welcome Screen 
       System.out.println("Welcome to CODEBREAKER "); 
       System.out.println("you have 6 tries to guess the secret 3 letter code."); 
       System.out.println("The letters Range from A to E"); 
       System.out.println("Goodluck"); 
       System.out.println("The code has no repeat letters"); 
       //end 
       letter1 = codeLetter.codeLetter(); 
       letter2 = codeLetter.codeLetter(); 
       letter3 = codeLetter.codeLetter(); 

       System.out.println(letter1 + letter2 + letter3); 
    } 
    /*public boolean done(){ 

    } 
    /*private boolean isValid*char){ 
     //- Is the given letter valid? 
    }*/ 

    public void getGuess(/*int*/){ 
     //- Get guess # 
    } 
    public void checkGuess(){ 
     //- Verify the guess 
    } 
    public void display(){ 
     //- Display the secret code 
    } 

} 

回答

1

我已經運行程序。波紋輸出我找到了。

Welcome to CODEBREAKER 
you have 6 tries to guess the secret 3 letter code. 
The letters Range from A to E 
Goodluck 
The code has no repeat letters 
B 
B 
C 
199 

如果我理解正確你必須與199問題。我想,你想BBC而不是199。這是因爲你用+標誌,將隱式轉換爲整數char類型,做算術運算。所以你有以下線路System.out.println(letter1 + letter2 + letter3);問題。您可以單獨打印這些不同的字符。

BTW,按預期codeletter()方法的返回字符。同樣對於這種語言的行爲,你可以researh上Strongly vs Weakly type

1

+運營商是要麼一個numeric additive operator一個string concatenation operator

Java語言規範,§15.18. Additive Operators,說:

如果+操作者的一個操作數的類型是String,則操作是字符串連接。

否則,每個+操作者的操作數的類型必須是一種類型的可轉換(§5.1.8)爲原始數字類型,[...]

您的代碼(letter1 + letter2 + letter3)是一個char + char + char表達,因爲他們都不是String值,它是一個數字添加表達式。

您有固定許多選擇:

  1. 直接從char[]創建String

    new String(new char[] { letter1, letter2, letter3 }) 
    

    這是最有效的方式,無論是性能,明智和內存明智的。
    我建議做這種方式。

  2. 將第一個字母爲String,所以+運營商就成了一個字符串連接運算符:

    String.valueOf(letter1) + letter2 + letter3 
    

    這是短寫,但效率不高,因爲它首先創建一個臨時字符串,那麼必須執行字符串連接來構建最終的字符串。

  3. 另一種方式的第一個字母轉換爲String

    Character.toString(letter1) + letter2 + letter3 
    

    內部,Character.toString()電話String.valueOf()(Java 8),所以它實際上是一樣的,你可以任意使用你最喜歡的。

  4. 直接執行字符串連接,所以你不需要創建初始臨時字符串:

    new StringBuilder().append(letter1).append(letter2).append(letter3).toString() 
    

    非常詳細。

  5. 開始與一個空字符串:

    "" + letter1 + letter2 + letter3 
    

    這是寫它的最簡潔的方式。很多人喜歡這種方式,因爲簡潔的,而且我相信額外的串的最小開銷甚至會在Java中9

被淘汰
相關問題