"布尔" s和"切换"陈述(错误)

时间:2013-07-29 01:42:08

标签: java casting

import java.math.BigInteger;

public class Classes{

static int i;        //"i" is initialized
static int x = 200;  //FYI, x is the upper limit for primes to be found (ex, in this case, 0 - 200)

public static void main(String[] args) {

for(i = 0; i < x;){        //"i" is assigned the value of 0 
    BigInteger one = BigInteger.valueOf(i);   // The following lines find the prime(s)
    one = one.nextProbablePrime();          // Order by which primes are found - int > BigInteger > int
    i = one.intValue();     //'i" is re-assigned the a value
    if(i >= x){     
        System.exit(i);     
    }

    switch(i){

    case i < 100:      // ERROR HERE, "Type mismatch: cannot convert from boolean to int"
        hex();
        break;

    case i > 100:      // ERROR HERE, "Type mismatch: cannot convert from boolean to int"
        baseTen();
        break;
    }
}
}


static void hex(){      //Probably unimportant to solving the problem, but this is used to convert to hex / print
    String bla = Integer.toHexString(i);
    System.out.println(bla);
}

static void baseTen(){  //Probably unimportant to solving the problem, but this is used print
    System.out.println(i);
}
}

各位大家好,我希望你们都做得很好。这是我第一次使用Stack Overflow,所以我提前为我可能犯的任何错误道歉。那么,让我们来吧!我在学习Java时编写了上面的代码作为练习片,并且自从练习和使用Java以来​​一直在使用它。该计划旨在寻找素数,并已经工作了一段时间。自从我决定尝试切换语句以来,我一直遇到问题。当我去运行代码时,Eclipse IDE会说“类型不匹配:无法从布尔值转换为int”,因此我的程序拒绝运行。我已经用我投射类型的点来评论我的代码,并且无处可选地将“i”转换为“boolean”类型。如果您对发生此问题的原因有任何疑问,请告诉我。如果您需要任何其他信息,请询问!谢谢!

4 个答案:

答案 0 :(得分:5)

switch(i){

只能为每种情况切换i的单个值。

请改用以下内容:

if(i < 100){
    hex();
}
if(i > 100){
    baseTen();
}

我也会处理i==100案件。这对读者来说只是一个简单的练习。

对于switch,您只能Enum,或者如果您有不同的int值,您只关心单值案例,而不是范围。

答案 1 :(得分:1)

switch是一个用于针对各种可能性测试一个变量的元素,如下所示:

switch (a) {
case 1:
  // this runs if a == 1
  break;
case 2:
  // this runs if a == 2
  // NOTE the lack of break
case 3:
  // this runs if a == 2 or a == 3
  break;
default:
  // this runs if a is none of the above
}

请注意,switch子句(a)中的类型应与case子句中的类型匹配(1)。案件条款不能是任意的布尔值。

当然,如果要准确指定条件是什么,可以使用“if / else”块,如下所示:

if (a == 1) {
  //...
} else if (a == 2) {
  //...
} else if (a == 3) {
  //...
} else {
  // runs if none of the above were true
}

后一个例子更接近你想要的;而不是使用==测试每个,而是直接评估if之后的每个布尔表达式。你的看起来会更像这样:

if (i < 100) {
    hex();
} else if (i > 100) {
    baseTen();
}

当然,他们可以保留两个单独的条款,但因为它们是相互排斥的,所以仍然使用else是有意义的。您还没有考虑i == 100的情况,这可能需要将<更改为<=>更改为>=

答案 2 :(得分:0)

Java中的

switch语句和大多数其他语言都适用于常量,而不是条件。所以,你可以写

switch (i)
{
  case 1:
    do_something();
    break;
  case 2:
    do_something_else();
    break;
  default:
    third_option();
}

但是,您的条件涉及比较而非条件,因此在Java中它们需要if语句:

if (i < 100)
  hex();
else if (i > 100)
  baseTen();

您可以找到有关switch语句here的详尽说明。

答案 3 :(得分:0)

欢迎来到SO。如果您阅读Java文档,则说明:

The type of the Expression must be char, byte, short, int, Character, Byte, Short, Integer, or an enum type, or a compile-time error occurs.

请参阅此处的参考:Java Switch