尽管没有使用布尔值,但我得到“类型不匹配无法从int转换为布尔值”

时间:2011-12-15 09:25:21

标签: java

我正在“Java如何编程”一书中进行练习。我应该制作一个模拟掷硬币的应用程序。我应该制作一个方法(翻转),随机返回硬币的一面。我已经决定让方法返回1或2,并且在main方法中我将“转换”值表示硬币的一侧。问题是我收到一条错误消息:“类型不匹配 - 无法从int转换为boolean”。我真的认为我一直只使用整数操作,并且看看布尔人是如何进入的。

代码如下:

import java.util.Random;

public class Oppgave629 
{

    public static void main(String[] args) 
    {
        int command = 1;
        int heads = 0;
        int tails = 0;
        while (command != -1)
        {
            System.out.print("Press 1 to toss coin, -1 to exit:");
            int coinValue = flip();
            if (coinValue = 1) {System.out.println("HEADS!"); heads++;}
            if (coinValue = 2) {System.out.println("TAILS!"); tails++;}
            System.out.printf("Heads: %d", heads); System.out.printf("Tails: %d", tails);
        }
    }

    static int flip()
    {
        int coinValue;
        Random randomValue = new Random();
        coinValue = 1 + randomValue.nextInt(2);
        return coinValue;
    }
}

5 个答案:

答案 0 :(得分:14)

您的代码

if (coinValue = 1) {System.out.println("HEADS!"); heads++;}
if (coinValue = 2) {System.out.println("TAILS!"); tails++;}

应该是

if (coinValue == 1) {System.out.println("HEADS!"); heads++;}
if (coinValue == 2) {System.out.println("TAILS!"); tails++;}

您正在为coinValue分配一个int类型,并且在if语句中将其作为bool进行评估。

答案 1 :(得分:6)

您在if语句中使用赋值(=)运算符而不是比较运算符(equality ==):

if (coinValue = 1)

应该是

if (coinValue == 1)

if语句需要一个布尔表达式,你将1分配给coinValue,然后尝试将其解释为一个布尔来处理条件。

答案 2 :(得分:1)

这是开发人员最常见和最危险的编程错误的一部分。在过去,编译器(例如C编译器)不会抱怨if(coinValue = 1)语句,因为它会影响coinValue为1,而总是将条件评估为true,因为它等于1 幸运的是, Java编译器捕获此错误,并且不允许您执行此操作。 如上面的答案中所述,将if (coinValue = 1)更改为if (coinValue == 1),您的问题应该得到解决。

答案 3 :(得分:0)

我遇到了这个错误b / c我在for语句中有i = 4,即“for(i = 1; i = 4; i ++)....”

你不能在for命令中使用等于“=”的停止值。

答案 4 :(得分:0)

if (coinValue == 1) {System.out.println("HEADS!"); heads++;} 
if (coinValue == 2) {System.out.println("TAILS!"); tails++;}

而不是

 if (coinValue = 1) {System.out.println("HEADS!"); heads++;}    
 if (coinValue = 2) {System.out.println("TAILS!"); tails++;}    

有2个等号