嗨我试着用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
}
}
答案 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
值,因此它是一个数字加法表达式。
你有很多选择来解决这个问题:
直接从String
:
char[]
new String(new char[] { letter1, letter2, letter3 })
这是最有效的方式,包括表现方式和记忆方式 我建议这样做。
将第一个字母转换为String
,以便+
运算符成为字符串连接运算符:
String.valueOf(letter1) + letter2 + letter3
写入时间较短,但效率较低,因为它首先创建一个临时字符串,然后必须执行字符串连接以构建最终字符串。
将第一个字母转换为String
的另一种方法:
Character.toString(letter1) + letter2 + letter3
在内部,Character.toString()
调用String.valueOf()
(Java 8),所以它真的相同,你可以使用你最喜欢的。
直接执行字符串连接,因此您不需要创建初始临时字符串:
new StringBuilder().append(letter1).append(letter2).append(letter3).toString()
非常详细。
以空字符串开头:
"" + letter1 + letter2 + letter3
这是编写它的最简洁方法。很多人都喜欢这种方式,因为简洁,我相信额外字符串的最小开销甚至可以在Java 9中消除。
答案 2 :(得分:0)
您要找的是Character.forDigit()