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);
}
}

みなさん、こんにちは。お元気でお過ごしください。スタック オーバーフローに参加するのはこれが初めてです。それでは、始めましょう!上記のコードは、Java を学習する際の練習用として作成したもので、それ以来、Java を練習したり遊んだりするために使用しています。このプログラムは素数を見つけるために作成され、しばらくの間機能しています。switch ステートメントを試してみることに決めて以来、問題が発生しています。コードを実行しようとすると、Eclipse IDE で「型の不一致: boolean から int に変換できません」と表示され、このためプログラムの実行が拒否されます。コードに型をキャストするポイントをコメントしましたが、「i」を「boolean」型にキャストする場所はどこにもありません。この問題が発生する理由について何か考えがある場合は、お知らせください。追加情報が必要な場合は、お問い合わせください。ありがとう!

4

4 に答える 4

5
switch(i){

i各ケースの単一の値に対してのみ切り替えることができます。

代わりに次を使用します。

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

私もそのi==100ケースを担当します。これは、読者への簡単な演習として残されています。

範囲ではなく、単一の値のケースのみを気にする個別の値がswitchある場合にのみ可能です。Enumint

于 2013-07-29T01:44:22.353 に答える
1

switch次のように、さまざまな可能性に対して 1 つの変数をテストするように設計された要素です。

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();
}

もちろん、それらは 2 つの別個の句のままにすることもできますが、相互に排他的であるため、引き続き を使用することは理にかなっています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 に答える