Eclipse - Java,从double转换为int

时间:2014-08-26 22:18:00

标签: java eclipse casting int double

我刚刚开始使用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 ()"和三者的组合。如果有人想知道这是为用户生成随机数字和字母串的代码的一部分。

//感谢您的帮助

5 个答案:

答案 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:

  • 添加一个返回语句(最后)
  • 将字符串比较更改为使用&#34;等于&#34;

答案 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.");
}