2016-03-23 12 views
0

私は飛行機チケットを生成するプログラムを作成しようとしています。その後、乗客リストを表示するかどうかをユーザーに尋ねます。forループ配列にレコードを格納して表示する

私が苦労しているのは、詳細を入力したすべてのユーザーの後で、乗客リストに追加する必要があるということです。 もしUser1が彼の詳細を入力し、乗客リストを見たいかどうか聞かれなければならない(今のところ旅客リストの下に1つのレコードしかない)、wen User2が彼の詳細を入力すると、乗客リストとUser2の詳細を乗客リストに追加する必要があります(乗客リストの下に2つのレコードがあります)。

これを参考にしてください。

public class Question12 { 

    public static void main(String[] args) { 
       double random = Math.random()* 69 + 1; 
       String q; 
     Scanner in = new Scanner(System.in); 
     String[][] PlaneTicket = new String[3][3]; 

     for (int row = 0; row < 67; row++) { 


      System.out.print("Enter name:");   
      PlaneTicket[row][0] = in.next(); 

      System.out.print("Enter surname: "); 
      PlaneTicket[row][1] = in.next(); 


      System.out.print("Enter a ID: "); 
      PlaneTicket[row][2] = in.next(); 

      System.out.println("************Airport**********"); 
      System.out.println("Seat number: " + Math.round(random)); 
      System.out.println("Name: " + PlaneTicket[row][0]); 
      System.out.println("Surname: " + PlaneTicket[row][1]); 
      System.out.println("ID: " + PlaneTicket[row][2]); 
      System.out.println("*****************************"); 

      System.out.println("Do you want to view the passanger list: " + "(Yes/No)"); 
      q = in.next(); 

      if ("Yes".equals(q)) { 
      System.out.println("Name  Surname  ID  Seat Number"); 
      System.out.println("----------------------------------------"); 
      System.out.println(PlaneTicket[row][0]+" "+PlaneTicket[row][1]+"  "+PlaneTicket[row][2]+ " "+ Math.round(random)); 
+0

あなたのコードは最下部で切り捨てられています... – Ceelos

+1

ここでは、最初の3-passanger情報のみを保存してからArrayIndexOutOfBoundExceptionを取得することができます。 –

+0

申し訳ありませんが、それは私が持っているすべてのコードです。ブラケットが欠けているだけです。 –

答えて

1

が表示されます。

System.out.println("Name  Surname  ID  Seat Number"); 
System.out.println("----------------------------------------"); 

for (int k = 0; k <= row; k++) { 
    System.out.println(PlaneTicket[k][0] + " " + PlaneTicket[k][1] + "  " + PlaneTicket[k][2] + " " + Math.round(random)); 
} 

それは、あなたの質問に答えるん?

いくつかの発言String[][] PlaneTicket = new String[67][3];

  • あなたのコードを読みやすくするために役立つだろうクラスPassengerTicketを作成する必要があります。

    • あなたが(コメントで述べたように)配列のサイズを修正する必要があります
    • 異なる操作(追加、印刷、...)のためのメソッドを利用するためにコードを再設計する必要があります
    • 出力はフォーマットでなければなりません(String.formatを使用して、例えば)D
    • あなたは、あなたのコードが読みやすく、おそらく保守が容易になるだろうこれは、Collectionsを見ている必要があります。ここすなわち、https://docs.oracle.com/javase/7/docs/api/java/util/Collections.htmlhttps://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

    は、いくつかの修正とあなたの主な方法であり、 、述べたように、いくつかの再設計(私の発言を参照)を行ってください:あなたは2次元配列PlaneTicket = new String[3][3]を初期化し、66にそれを実行し

    public static void main(String[] args) { 
        final int maxPassengers = 67; 
    
        double random = Math.random() * 69 + 1; 
        String q; 
        Scanner in = new Scanner(System.in); 
        String[][] PlaneTicket = new String[maxPassengers][4]; 
    
        for (int row = 0; row < maxPassengers; row++) { 
         System.out.print("Enter name:"); 
         PlaneTicket[row][0] = in.next(); 
    
         System.out.print("Enter surname: "); 
         PlaneTicket[row][1] = in.next(); 
    
         System.out.print("Enter a ID: "); 
         PlaneTicket[row][2] = in.next(); 
    
         // you should keep the SeatNumber 
         PlaneTicket[row][3] = String.valueOf(Math.round(random)); 
    
         System.out.println("************Airport**********"); 
         System.out.println("Seat number: " + PlaneTicket[row][3]); 
         System.out.println("Name: " + PlaneTicket[row][0]); 
         System.out.println("Surname: " + PlaneTicket[row][1]); 
         System.out.println("ID: " + PlaneTicket[row][2]); 
         System.out.println("*****************************"); 
    
         System.out.println("Do you want to view the passanger list: " + "(Yes/No)"); 
         q = in.next(); 
    
         if ("Yes".equalsIgnoreCase(q) || "y".equalsIgnoreCase(q)) { 
          System.out.println("Name  Surname  ID  Seat Number"); 
          System.out.println("----------------------------------------"); 
    
          for (int k = 0; k <= row; k++) { 
           System.out.println(PlaneTicket[k][0] + " " + PlaneTicket[k][1] + "  " + PlaneTicket[k][2] + " " + PlaneTicket[row][3]); 
          } 
         } 
        } 
    } 
    
  • +0

    ありがとうございました。私はちょうどそれをテストし、それは完全に動作します。 –

    +0

    私は答えに投票しなかった。 –

    +1

    私はそれをしましたが、配列のサイズについての発言を追加したので、私はそれを取り消しました。 +1 – user8

    0

    あなたは方法displayList(String[][] seats)を作成し、各顧客のタイプ"Yes"たら、それを呼び出す必要があります。この方法は、同様のループ(複数可)を持っていて、ちょうど今のところ、すべての入力した値を印刷したい場合は、あなたが行うことができ、現在のリストに

    for (int row = 0; row < 67; row++) { ....} 
    
    0

    を...それは明らかにIndexOutOfBounds Exceptionを与えます。最良の方法は、マジックナンバーを避けて、rowcolumnのような変数に入れてから反復するというものです。

    それ以外の場合は正常です。

    第2に、リストの配列に注意してください。あなたは乗客リストまたはの配列を意味しますか?

    あなたは一番下にあるようですが、いくつかの括弧がありません。インデックス作成を修正したら、それが機能するはずです。

    関連する問題