1

私はプログラミングが初めてで、クラスを受講しています。私の課題の 1 つに、switch ステートメントの使用が含まれますが、これは最近学習したばかりです。ほとんどのコードを取得しましたが、何らかの理由で switch ステートメントが機能しません。プログラムがコンパイルされ、必要な入力が求められますが、値を入力しても switch ステートメントが出力されません。基本的には、ユーザーに学生番号 (任意の番号) を入力し、単位を入力して、正しいステートメントを印刷するように求めます。これが私のコードです:

import java.io.*;
import java.util.*;
public class Prog222
{
    public static void main(String[] args)
    {
        for(int i = 1; i<=4; i++)
        {
            double freshmanC = 1.0;
            double sophomoreC = 2.0;
            double juniorC = 3.0;
            double seniorC = 4.0;
            Scanner kbReader = new Scanner(System.in);
            System.out.print("Enter student number "); //Enter 2352, 3639, 4007, and 4915 respectively
            int studentNumber = kbReader.nextInt();
            System.out.print("Enter credits "); //Enter 30.0, 29.9, 70, and 103.7 respectively
            double credits = kbReader.nextDouble();
            switch((int) credits)
            {
                case '1': //Below 30 credit
                System.out.println("Grade level code = " + freshmanC);
                break;
                case '2': //30 credits or more but less than 70 credits
                System.out.println("Grade level code = " + sophomoreC);
                break;
                case '3': //70 credits or more but less than 90 credits
                System.out.println("Grade level code = " + juniorC);
                break;
                case '4': //90 credits or more
                System.out.println("Grade level code = " + seniorC);
                break;
            }
        }
    }
}

私はこれに数時間取り組んできましたが、印刷されないため、switch ステートメントのどこが間違っているのか本当にわかりません。助けていただければ幸いです。ありがとう!

4

3 に答える 3

5

文字リテラルではなく整数を比較するように、引用符を削除します。

switch((int) credits) { 
  case 1:
     ...
于 2013-11-13T19:04:45.783 に答える
2

ここには 2 つの根本的な問題があります。int1 つ目は、値と値を比較しようとしているということです。つまり、どのcharケースも実行されません。

2 番目の問題は、switchステートメントが特定のコードを実行するには、大文字と小文字が完全に一致しcaseている必要があることです。したがって、仮に次の代わりに使用していたとします。intchar

switch((int) credits)
    {
        case 1: //Below 30 credit
            System.out.println("Grade level code = " + freshmanC);
            break;
        case 2: //30 credits or more but less than 70 credits
            System.out.println("Grade level code = " + sophomoreC);
            break;
        case 3: //70 credits or more but less than 90 credits
            System.out.println("Grade level code = " + juniorC);
            break;
        case 4: //90 credits or more
            System.out.println("Grade level code = " + seniorC);
            break;
    }

クレジットの値がそれぞれ 1、2、3、または 4 でない限り実行されません。これを修正する簡単な方法は、クレジットを 30 で割って 1 を追加することです。

int newCredits = ((int)credits/30) + 1
switch(newCredits)
    {
        case 1: //Below 30 credit
            System.out.println("Grade level code = " + freshmanC);
            break;
        case 2: //30 credits or more but less than 70 credits
            System.out.println("Grade level code = " + sophomoreC);
            break;
        case 3: //70 credits or more but less than 90 credits
            System.out.println("Grade level code = " + juniorC);
            break;
        default: //90 credits or more
            System.out.println("Grade level code = " + seniorC);
            break;
    }

簡単なメモとして、個人が 120 を超えるクレジットを持っている場合でもシニアとして分類されるように変更case 4:しました。default:

編集

それで、あなたの単位時間は一様に増加しないことに気づきました(これは、すべての大学が全員を同じように分類すると仮定した場合に得られるものです). 自分の価値をある種の標準化する方法を見つける必要がありますcredits

于 2013-11-13T19:15:44.210 に答える
1

整数をオンにしていますが、ケースでは char を使用しています。そうです、これらのケースはどれも真実ではありません。

于 2013-11-13T19:04:42.263 に答える