0

ArrayListオプション「a」を選択すると、すべてにいくつかの値を格納できます。しかし、オプション'b'に移動して、入力したものを取得して変数に格納しrq(予約された部屋の数を確認するため)、オプション'b'のforループを使用してループさせようとすると。しかし、すべての配列は空です。

コンパイル時に「エラー」も発生します。

オプション'b'forループで、これを実行しました

for(int i=0;i<all.get(4);i++)

しかし、エラーが発生します:error: bad operand types for binary operator '<'

それでキャストすることにしました。

for(int i=0;i<(Integer)all.get(4);i++)

現在エラーはありませんが、コンパイルに問題があるようです。

注:C:\ Users \ MegaStore \ Desktop \ java tests \ RoomSelection.javaは、チェックされていない、または安全でない操作を使用します。注:詳細については、-Xlint:uncheckedを指定して再コンパイルしてください。

したがって、入力した値がヒープ内にあるのか、オプション「b」を選択したときにガベージコレクターによって削除されるのか疑問に思います。

私のコードはまだ完全に入力されていませんが、目前の問題を解決したいと思います。

私のプログラムでは、ユーザーが必要とするアドオンの数(最大は4)を記録して保存する必要もあります。そのため、どこに追加して保存するのかよくわかりません。

import java.util.*;
import java.io.*;

public class test123{

public test123()throws InputMismatchException {

    String choiceStr;//initialize choiceStr which is use for reading lines from scanner input
    char choiceChar;//initialize choiceStr which is use for reading character from scanner input
    int choice,rt,rq,ao1,night,ao2,quan;//initialize choiceStr which is use for reading integer from scanner input
    String datee;
    String[] roomType = {"Single Room", "Double Room", "Deluxe Room", "Junior Room", "Suite"}; //Initialize a array for room type
    Integer[] priceRoom = {160,200,280,380,500}; //Initialize a array for room prices
    Integer[] priceAdd = {25,60,70,100}; //Initialize a array for add-on prices
    ArrayList<String> roomAndDate = new ArrayList<String>();
    ArrayList<Integer> all = new ArrayList<Integer>();
    Scanner input= new Scanner(System.in); //Initialize a scanner input

    System.out.println("Room Selection");
    System.out.println("==============\n");
    System.out.println("[a] Room Type");
    System.out.println("[b] Add-Ons");
    System.out.println("[c] Main Menu");
    System.out.println("Type 'a' to select Room Type and state the desire quantity for each type.");
    System.out.println("Type 'b' to select the Add-Ons.");
    System.out.println("Type 'c' to exit from  the Booking Menu.");
    System.out.println("Please enter your option (a, b or c): ");

    ;
    choiceStr = input.nextLine();
    choiceChar = choiceStr.charAt(0); 

    switch(choiceChar){
        case 'a':   System.out.println("Room Type");
                    System.out.println("=====================================================");
                    System.out.println("(1) Single Room (1 person) - Price: S$160");
                    System.out.println("(2) Double Room (2 persons) - Price: S$200");
                    System.out.println("(3) Deluxe Room (2 persons) - Price: S$280");
                    System.out.println("(4) Junior Suite (2 persons) - Price: S$380");
                    System.out.println("(5) Suite (2 persons) - Price: S$500\n");
                    System.out.println("Enter Room types (Enter '1' to '5')");
                    choice=input.nextInt();
                    while(choice>5){
                        if(choice>5){
                        System.out.println("Please enter number between '1' to '5'!");
                        choice=input.nextInt();
                        }                   
                    }

                    String roomTypess= roomType[choice-1];
                    roomAndDate.add(roomTypess);
                    int storePricee = priceRoom[choice-1];
                    all.add(storePricee);

                    System.out.println("Number of rooms required (maximum 10): ");
                    choice=input.nextInt();
                    while(choice>10){       
                        if(choice>10){
                        System.out.println("Please enter again!");
                        choice=input.nextInt();
                        }
                    }
                    all.add(choice);

                    for(int i=0;i<choice;i++){
                        System.out.println("Enter the date of checked-in (dd/mm/yy) for "+roomAndDate.get(0) +" " + (i+1));
                        choiceStr = input.nextLine();
                        choiceStr = input.nextLine();
                        roomAndDate.add(choiceStr);
                        System.out.println(roomAndDate);
                        System.out.println("Enter number of Add-on for "+roomAndDate.get(0) + " " +(i+1)+": ");
                        choice=input.nextInt();
                        while(choice>4){
                        if(choice>4){   
                            System.out.println("Please enter again! Choose only option 1 to 4");
                            choice=input.nextInt();
                            }                           
                        }
                        all.add(choice);            
                        System.out.println("Number of night(s) required (maximum 30) for "+roomAndDate.get(0) + " " +(i+1)+ ": ");
                        choice=input.nextInt();
                        while(choice>30){   
                            if(choice>30){
                            System.out.println("Please enter again! Maximum is 30 days!");
                            choice=input.nextInt();
                            }
                        }           
                        all.add(choice);


                    }
                    new RoomSelection();

                    break;          
        case 'b':       System.out.println("Room req is empty? : "+all.isEmpty());
                        System.out.println("Add-Ons");
                        System.out.println("=====================================================");
                        System.out.println("(1) Breakfast voucher (1 person) per day - Price: S$25");
                        System.out.println("(2) Spa voucher (1 person) - Price: S$60");
                        System.out.println("(3) Half Day Tour voucher (1 person) - Price: S$70");
                        System.out.println("(4) Full Day Tour voucher (1 person) - Price: $100\n");



                        for(int i=0;i<(Integer)all.get(3);i++){

                        System.out.println("Enter Add-On option");
                        choice=input.nextInt();
                        while(choice>4){
                            if(choice>4){   
                                System.out.println("Please enter again! Choose only option 1 to 4");
                                choice=input.nextInt();
                            }                           
                        }
                        all.add(choice);
                        System.out.println("Enter quantity required for Add-On option " + (i+1)+": ");
                        choice=input.nextInt();
                        all.add(choice);
                        }

                    break;
        case 'c':   new MainPage1();break;
        default:continue;
    }

}

}
4

3 に答える 3

3

これが、ジェネリックを使用する必要がある理由です。現在、 の宣言を見るとall、コンパイラもリーダーも、そこに何があるべきかを理解できません。コードを見ると、文字列と整数が混在しているようです。それは災害のレシピです。そもそも何を表現するのが本当の意味ですか?文字列と整数が混在しているのはなぜですか?

おそらく、Roomこのすべての情報を含む型が必要なようでall、次のように宣言する必要があります。

List<Room> allRooms = new ArrayList<Room>();

さらに、この方法は現時点では長すぎます。1行が約20行を超えると緊張します...でも130行以上?えー!抽出できるビット (コードの残りの部分に影響を与えないビット) を見つけます。

ああ、配列初期化子について学び、これを有効にします。

Integer[] priceAdd = new Integer[4]; //Initialize a array for add-on prices
priceAdd[0]=25; //To be added to array add-on price
priceAdd[1]=60; //To be added to array add-on price
priceAdd[2]=70; //To be added to array add-on price
priceAdd[3]=100; //To be added to array add-on price      

これに:

int[] addOnPrices = { 25, 60, 70, 100 };

(現在、小数値は必要ないと想定していますが、Integerではなく である必要がある理由はわかりません...)int

于 2012-07-25T17:18:53.037 に答える
1

次のように ArrayList の型を定義する必要があります。

ArrayList<String> all = new ArrayList<String>();

または、使用している非プリミティブ データ型を使用します。

于 2012-07-25T17:19:02.990 に答える
1

List<Integer> all = new ArrayList<Integer>();

上記は常に整数値を受け入れて返します。

于 2012-07-25T17:52:01.657 に答える