我刚刚开始使用Eclipse,而且我对Java很陌生。我有一块代码块,它不会被编译,因为我生成的随机数不会被转换为整数。错误消息显示"此方法必须返回int"类型的结果。在下面的代码块中的第二行。
public class passwordHelper {
public int rNum(String nums, String lets){
int z;
if(nums == "yes" && lets == "yes"){
z = (int)Math.random()*36;
return z;
} else if(nums == "yes"){
z = (int)Math.random()*10;
return z;
} else if(lets == "yes"){
z = (int)Math.random()*26 + 10;
return z;
} else {
System.out.println("Sorry, you need either letters or numbers in your password.");
}
}
}
如您所见,我正在使用"(int)"函数将我的数字转换为整数,但它向我发送了相同的错误消息,我也尝试过使用其他的转换方法,例如" Math.floor()"," Math.round ()"和三者的组合。如果有人想知道这是为用户生成随机数字和字母串的代码的一部分。
//感谢您的帮助
答案 0 :(得分:1)
您必须在所有分支中返回一个值,有三种可能性:
1)在else分支中返回一个int:
public int rNum(String nums, String lets){
int z;
if(nums == "yes" && lets == "yes"){
z = (int)Math.random()*36;
return z;
} else if(nums == "yes"){
z = (int)Math.random()*10;
return z;
} else if(lets == "yes"){
z = (int)Math.random()*26 + 10;
return z;
} else {
System.out.println("Sorry, you need either letters or numbers in your password.");
return -1;
}
}
2)抛出未经检查的异常
public int rNum(String nums, String lets){
int z;
if(nums == "yes" && lets == "yes"){
z = (int)Math.random()*36;
return z;
} else if(nums == "yes"){
z = (int)Math.random()*10;
return z;
} else if(lets == "yes"){
z = (int)Math.random()*26 + 10;
return z;
} else {
System.out.println("Sorry, you need either letters or numbers in your password.");
throw new RuntimeException("Sorry, you need either letters or numbers in your password.");
}
}
3)抛出一个检查过的异常
public int rNum(String nums, String lets) throws Exception {
int z;
if(nums == "yes" && lets == "yes"){
z = (int)Math.random()*36;
return z;
} else if(nums == "yes"){
z = (int)Math.random()*10;
return z;
} else if(lets == "yes"){
z = (int)Math.random()*26 + 10;
return z;
} else {
System.out.println("Sorry, you need either letters or numbers in your password.");
throw new Exception("Sorry, you need either letters or numbers in your password.");
}
}
答案 1 :(得分:0)
Math.random()
返回0到1之间的数字。如果将其强制转换为int,则获得0.您可以将double乘以,然后使用parantheses添加强制转换。
<强>替代:强> 您可以使用:
Random rand = new Random();
然后
rand.nextInt(...);
P.S:
答案 2 :(得分:0)
你的方法必须返回一个int值,但是在你的最后一个块中你没有返回任何东西。返回默认值,例如返回0或抛出一个说无效输入的异常。
还有;
要比较两个字符串,必须使用其equals方法。
将nums == "yes"
更改为"yes".equals(nums)
和
lets == "yes"
至"yes".equals(lets)
答案 3 :(得分:0)
试试这个:
public int rNum(String nums, String lets){
int z;
Random random = new Random();
if(nums.equals("yes") && lets.equals("yes")){
z = random.nextInt(36);// generates a random number from 0 to 36
return z;
} else if(nums.equals("yes")){
z = random.nextInt(10);//generates a random number from 0 to 10
return z;
} else if(lets.equals("yes")){
z = random.nextInt(26 + 10);//generates a random number from 0 to 36
return z;
} else {
System.out.println("Sorry, you need either letters or numbers in your password.");
return -1;
}
}
答案 4 :(得分:0)
String
是引用类型,您无法将引用类型与比较运算符进行比较。即你不能在这里使用==
要比较字符串,您可以使用equals()
或equalsIgnoreCase()
。
equalsIgnoreCase()
在比较两个字符串时不考虑套管,我更喜欢在这里使用它。但在此我通过将==
替换为equals()
来修改您的代码。如果你不想考虑套管,即想要yes
以及此YES
为真,那么请改用equalsIgnoreCase()
。
int z;
if(nums.equals("yes") && lets.equals("yes")){
z = (int)Math.random()*36;
return z;
} else if(nums.equals("yes")){
z = (int)Math.random()*10;
return z;
} else if(lets.equals("yes")){
z = (int)Math.random()*26 + 10;
return z;
} else {
System.out.println("Sorry, you need either letters or numbers in your password.");
}