Interger被通过但预计会有Char值吗?

时间:2016-11-12 17:42:38

标签: java class methods

嗨我试着用3个随机字母做一个猜字游戏,当我尝试使用下面的代码得到一个值时,它总是作为一个int返回给另一个程序,我试图接收它作为一个字母,但可以& #39;弄清楚。

 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值,而不是char。 该计划要求两个班级作为要求

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
    }

}

3 个答案:

答案 0 :(得分: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()方法按预期返回char。此外,对于这种语言行为,您可以在Strongly vs Weakly type

上进行研究

答案 1 :(得分:1)

+运算符 一个numeric additive operator 一个string concatenation operator

Java语言规范,§15.18. Additive Operators,说:

  

如果+运算符的任一操作数的类型为String,则该操作为字符串连接。

     

否则,+运算符的每个操作数的类型必须是可转换(§5.1.8)到原始数字类型的类型,[...]

您的代码(letter1 + letter2 + letter3)是char + char + char表达式,由于它们都不是String值,因此它是一个数字加法表达式。

你有很多选择来解决这个问题:

  1. 直接从String

    创建char[]
    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中消除。

答案 2 :(得分:0)

您要找的是Character.forDigit()