0
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。该程序用于查找素数,并且已经运行了一段时间。自从我决定尝试 switch 语句以来,我一直遇到问题。当我运行代码时,Eclipse IDE 显示“类型不匹配:无法从布尔值转换为 int”,因此我的程序拒绝运行。我已经用我转换类型的点注释了我的代码,并且我没有将“i”转换为“boolean”类型。如果您对为什么会出现此问题有任何想法,请告诉我。如果您需要任何其他信息,请务必询问!谢谢你!

4

4 回答 4

5
switch(i){

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

请改用以下内容:

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

我也会处理这个i==100案子。这留给读者作为一个简单的练习。

您只能switch针对一个Enum或如果您有不同的int值,您只关心单值情况,而不是范围。

于 2013-07-29T01:44:22.353 回答
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) 中的类型匹配。case 子句不能是任意的布尔值。

当然,如果您想准确指定条件,可以使用“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可能需要更改<<=>的情况>=

于 2013-07-29T01:46:45.240 回答
0

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

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 语句的详尽描述。

于 2013-07-29T01:47:05.350 回答
-1

欢迎来到 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 开关

于 2013-07-29T01:47:57.370 回答