3

このエラーの原因がわかりません。先生と私はそれを調べましたが、何が悪いのかわかりませんでした。

import java.util.Scanner;
public class MailAssignment
{
public static void main(String [] args){

    Scanner userinput = new Scanner(System.in);
    char p;
    char f;
    double price = 0;
    System.out.println("First class or priority?");
    char type = userinput.next().charAt(0);
    System.out.println("How much does the package weigh? (in ounces)");
    double weight = userinput.nextDouble();

    switch (type){
     case p:
     if (weight > 16)
        price = weight * 3.95;

        else if (weight > 32) 
            price = (1.20 * (weight / 16));
       else
            price = 3.50 * weight;


        break;


     case f: 
     if (weight < 1 )
     price = 0.34;

     else if ( weight > 1)
     price = 0.34 + (weight * 21);

     else if (weight > 13)
     price = weight * 3.95;

        else if (weight > 32) 
            price = 1.20 * (weight / 16);
        else
            price = 3.50 * weight;

            break;

        }     

    System.out.println("Your price is: " +price);
    }
}

コンパイル時に「Constantexpressionrequired」エラーがスローされ、ケースp:行を指しますが、f:に対してもスローされます。これらを切り替えると、完全にオフにする必要があります。

4

3 に答える 3

10

はい、case式は定数(または列挙型定数名)である必要があります-変​​数を使用することはできません。詳細については、Java言語仕様のセクション14.11(switchステートメント)を参照してください。(変数を初期化していないので、正直なところ、何が起こるかは明確ではありません。)

もしかして:

case 'p':
    ...

case 'f':
    ...

?これにより、入力(type)が文字リテラル 'p'および。と照合されます'f'

(余談ですが、これがあなたの先生を困惑させた場合、私は彼らがJavaを教えるのにどれほど適しているかについて懸念しています。これはかなり基本的なことです。)

于 2013-02-26T14:14:07.183 に答える
1

caseステートメントで変数を使用することはできません。変数はリテラルcharである必要があります(例'p':)'f'

于 2013-02-26T14:14:44.223 に答える
1

case ステートメント
では (文字スイッチ) または (数字スイッチ) のみを使用する必要があります
。たとえば
、 (文字スイッチ) を使用できます。

switch (type) {
case 'p':
.......
case 'f':
......
}

いいえ

switch (type) {
case p:
.......
case f:
......
}
于 2013-02-26T14:23:17.650 に答える