2017-11-30 8 views
0

私はCSCIクラスの宿題をしており、ハードルになっています。アレイ内の一部のオブジェクトのみを印刷するにはどうすればよいですか?

私たちの宿題では、乗客クラスとその後のフライトコードを作成しました。

私たちのフライトは、テキストファイルから最初の20人を読み込み、それらを配列オブジェクト内のスポットに割り当てることです。 20人が入場した後、残りの乗客(21-55)は、ダイアログボックスを使用してユーザーに挿入されます。

私はこのすべてを行ったことがありますが、その後、フライトクラス、すなわちファーストクラスのすべての人物が印刷され、次にビジネスとエコノミーが印刷されます。すべてのオブジェクトを印刷しようとすると、ユーザーが入力したすべての人物ではなく、テキストファイルの人物だけが印刷されます。ここで

は私のコードはここ

import javax.swing.JOptionPane; 
import java.io.*; 

import java.util.Scanner; 

public class Flight_EdgarFlores 
    { 
     public static void main(String[] args) throws IOException 
     { 
     String fullName=null; 
     String seatClass=null; 
     String seatNumber=null; 
     String ff_Number=null; 
     String points=null; 
     String line, word; 
     int seat_Choice, again; 

     Passengers[] Pass; 
    final int NUM_OF_PASSENGERS= 55; //size of array 
    Pass = new Passengers[NUM_OF_PASSENGERS]; 

    Scanner lineScan; 
    Scanner fileScan = new Scanner(new File("PassengerList.txt")); 

    int line_counter = 0; 
    int word_counter = 0; 

    while(fileScan.hasNext()) 
    { 
     line = fileScan.nextLine(); 

     lineScan = new Scanner(line); // Scans each line of the file 
     lineScan.useDelimiter(", "); 

     word_counter = 0; 
     while(lineScan.hasNext()) // Reads each word in the line 
     { 

     word = lineScan.next(); 
     switch (word_counter) 
     { 
      case 0: 
      fullName = word; 
      break; 
      case 1: 
      seatClass = word; 
      break; 
      case 2: 
      seatNumber = word; 
      break; 
      case 3: 
      ff_Number = word; 
      break; 
      case 4: 
      points = word; 
      break; 
      } 
     word_counter++; 
     } 
     if(word_counter==3) 
     Pass[line_counter] = new Passengers(fullName, seatClass, seatNumber); 

     if(word_counter==5) 
     Pass[line_counter] = new Passengers(fullName, seatClass, seatNumber, ff_Number, points); 

     line_counter++; 
    } 
    int counter=20; 
    do 
    { 
     String full_Name = JOptionPane.showInputDialog("Enter Full Name: "); 

     String[] seatClassChoice = new String[3]; 
     seatClassChoice[2] = "Economy Class"; 
     seatClassChoice[1] = "Business Class"; 
     seatClassChoice[0] = "First Class"; 

     int classChoice = JOptionPane.showOptionDialog(null, "Choose Seat Class", "Seat Class Choice", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, seatClassChoice, seatClassChoice[0]); 
     if(classChoice==0) 
     { 
     String[] seatChoice = {"1A", "2A", "3A", "4A", "5A", "6A"}; 
     seat_Choice = JOptionPane.showOptionDialog(null, "Choose Seat ", "Seat Choice", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, seatChoice, seatChoice[0]); 
     } 
     else if(classChoice==1) 
     { 
     String[] seatChoice = {"7A", "7B", "8A", "8B", "9A", "9B", "10A", "10B", "11A", "11B"}; 
     seat_Choice = JOptionPane.showOptionDialog(null, "Choose Seat ", "Seat Choice", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, seatChoice, seatChoice[0]); 
     } 
     else if(classChoice==2) 
     { 
     String[] seatChoice = {"12A", "12B", "12C", "13A", "13B", "13C", "14A", "14B", "14C", "15A", "15B", "15C", "16A", "16B", "16C", "17A", "17B", "17C", "18A", "18B", "18C", "19A", "19B", "19C", "20A", "20B", "20C", "21A", "21B", "21C", "22A", "22B", "22C", "23A", "23B", "23C", "24A", "24B", "24C" }; 
     seat_Choice = JOptionPane.showOptionDialog(null, "Choose Seat ", "Seat Choice", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, seatChoice, seatChoice[0]); 
     } 
     Pass[counter] = new Passengers(full_Name, seatClass, seatNumber); 
     again = JOptionPane.showConfirmDialog(null, "Add another Passenger?"); 
     counter++; 
    }while((counter<NUM_OF_PASSENGERS)&& (again==JOptionPane.YES_OPTION)); 

    Pass[0].addFrequentFlyer("#2AZ433", "4455"); //adds flyer number and flyer points to object at index 0 

    for(int i=0; i<NUM_OF_PASSENGERS; i++) 
    { 
     if(Pass[i].getseatClass().equals("First Class")) 
     System.out.println(Pass[i] + " , " + i); 

    } 
    for(int i=0; i<=NUM_OF_PASSENGERS; i++) 
    { 
     if(Pass[i].getseatClass().equals("Business Class")) 
     System.out.println(Pass[i] + " , " + i); 
    } 
    for(int i=0; i<=NUM_OF_PASSENGERS; i++) 
    { 
     if(Pass[i].getseatClass().equals("Economy Class")) 
     System.out.println(Pass[i] + " , " + i); 
    } 

    } 
} 

であるあなたは、以下のチェックを行っているので、私の推測では、あなたの境界例外のうちの配列を投げている私の乗客クラス

public class Passengers 
{ 
    private String fullName, seatClass, seatNumber, frequentFlyerNumber, flyerPoints; 

    public Passengers (String full_name, String seat_class, String seat_number, String frequent_flyernumber, String flyer_points) 
    { 
    fullName=full_name; 
    seatClass=seat_class; 
    seatNumber=seat_number; 
    frequentFlyerNumber=frequent_flyernumber; 
    flyerPoints=flyer_points; 
    } 
    public Passengers (String full_name, String seat_class, String seat_number) 
    { 
    fullName=full_name; 
    seatClass=seat_class; 
    seatNumber=seat_number; 
    } 

    public void addFrequentFlyer (String frequent_flyer_number, String flyer_Points) 
    { 
    frequentFlyerNumber=frequent_flyer_number; 
    flyerPoints=flyer_Points; 
    } 

/* public String getLastName() 
    { 
    String lastName=""; 
    int nameLength= fullName.length(); 
    for(int i =nameLength; i> 0; i--) 
    { 
     if(full_name.charAt(i)!=' ') 
     lastName+=fullName.charAt(i); 
     else 
     break; 
    } 
    }*/ 

    public String getseatClass() 
    { 
    return seatClass; 
    } 
    public String toString() 
    { 
    return fullName + ", "+ seatClass + ", " + seatNumber; 
    } 
} 
+2

これは学校の課題です(それについて正直で感謝します)、私はあなたの学習のために、あなたが試したことを綴ることが重要だと思います。この場合、コードには、ユーザーが提供する追加の乗客をロードしようとしたという証拠はありません。あなたがそれらの顧客をロードするために行った任意の試みを提供してください、そうでなければ、あなたにあなたの宿題をするように誰かに依頼しているように見えます。 – Alan

+0

彼らは、Pass [counter] = new Passengers(full_Name、seatClass、seatNumber)という行でwhileループで毎回乗客を作成します。 @アラン? sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)でsun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)でFlight_EdgarFlores.mainで –

答えて

0

ですビジネスとエコノミーのお客様のためのあなたのforループ

for(int i=0; i<=NUM_OF_PASSENGERS; i++)... 
あなたが私に< = NUM​​_OF_PASSENGERSをやっているので、配列は0をベースとしているので、私は= NUM​​_OF_PASSENGERSあなたが存在しないインデックスにアクセスしようとしようとしている一度あなたが、

for(int i=0; i<NUM_OF_PASSENGERS; i++)... 

を行い、あなたのファーストクラスの乗客のためにしかし

あなたの配列の最後のインデックスは実際にはNUM_OF_PASSENGERS - 1なので、ビジネスまたはエコノミーの旅客を印刷しようとすると、配列外の例外が発生します。

+0

java.lang.NullPointerExceptionが \t(Flight_EdgarFlores.java:103) \t \t sun.reflect.DelegatingMethodAccessorImpl.invokeで \t(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invokeで \t(Method.java:606)edu.rice.cs.drjava.model.compilerで \t .JavacCompiler.runCommand(JavacCompiler.java:272)**このエラーが表示されます** –

+0

メインの103行は何ですか? @EdgarFloresその後、私はあなたを助けることができます –

関連する問題