2016-10-14 12 views
0

ユーザーからの入力を受け入れるプログラムを作成し、2次元配列に格納します。例の状況では、ユーザはsemester = 2の入力番号を入力します。当然のことながら、それも= 2;である。私のループは正常に動作していますが、データはうまく格納されません。2D配列データはnullですか?

出力: ヌル ヌル ヌル INPUT4

それは次のようにする必要があります INPUT1 INPUT2 INPUT3 INPUT4ここ

私のコード:

BufferedReader inData = new BufferedReader(new InputStreamReader(System.in)); 

    try { 

     System.out.print("Enter no of semester : "); 
     data = inData.readLine(); 
     noSem = Integer.parseInt(data); 

     // Semester loop 
     for(int i = 0; i < noSem; i++) { 

      System.out.println("\n\tSemester" + (i + 1)); 
      System.out.print("Enter number of course : "); 
      data = inData.readLine(); 
      noCourse = Integer.parseInt(data); 

      // course details loop 
      for(int u = 0; u < noCourse; u++) { 

       System.out.println("Enter Course Code : "); 
       System.out.print("Enter Course Name : "); 
       sbjName = new String[noSem][noCourse]; 
       sbjName[i][u] = inData.readLine(); 

       System.out.println("Enter Credit Hour : "); 
       System.out.println("Enter Marks : "); 
       System.out.println("\n"); 

      } 
     } 

     for(int x = 0; x < noSem; x++) { 
      for(int y = 0; y < noCourse; y++) { 
       System.out.println(sbjName[x][y]); 
      } 
     } 
    } 
+0

ヒント:あなたは、ループに入る前に1つの配分を必要とし、外部ループの各反復では、あなたがすべき別の割り当てを行います。 – Slava

答えて

2
BufferedReader inData = new BufferedReader(new InputStreamReader(System.in)); 

try { 
    System.out.print("Enter no of semester : "); 

    int noSem = Integer.parseInt(inData.readLine()); 
    String[][] sbjName = new String[noSem][]; 

    // Semester loop 
    for (int i = 0; i < noSem; i++) { 
     System.out.println("\n\tSemester" + (i + 1)); 
     System.out.print("Enter number of course : "); 

     int noCourse = Integer.parseInt(inData.readLine()); 
     sbjName[i] = new String[noCourse]; 

     // course details loop 
     for (int u = 0; u < noCourse; u++) { 
      System.out.println("Enter Course Code : "); 
      System.out.print("Enter Course Name : "); 
      sbjName[i][u] = inData.readLine(); 

      System.out.println("Enter Credit Hour : "); 
      System.out.println("Enter Marks : "); 
      System.out.println("\n"); 
     } 
    } 

    for (int x = 0; x < sbjName.length; x++) { 
     for (int y = 0; y < sbjName[x].length; y++) { 
      System.out.println(sbjName[x][y]); 
     } 
    } 
} 
+0

ああ、それはスマートです... – ItamarG3

+0

これは、あなたが 'sbjName [i] = new String [noCourse];' –

+0

を作る理由を知っているかもしれませんが、完全にうまくいきます。各学期* i *(各学期)学期に与えられたコースの数。 毎回コース数(* noCourse *)が異なる場合があります。 そのため、この特定の学期のすべてのコースに* noCourse *という配列を割り当てます。 – Slava

1

あなたの問題はあるがここ:

文は 反復中に 新しい配列を作成し
sbjName = new String[noSem][noCourse]; 

。言い換えれば、あなたは以前に作成した配列を投げ捨てているということです。したがって、以前にそれらの配列に保存されていた情報はすべて破棄されます。

を1回だけ電話したいとします。あなたはあなたのループのの外にを移動します!

+0

'noCourse'は反復ごとに異なります。したがって、外部ループの反復ごとに、リニア配列の新しい割り当てを行う必要があります。 – Slava

+0

私はそれを外に移動した後。アウトプット表示とカントが別の入力に継続しません。 –

+0

は動作しません(テスト済み) – ItamarG3

0

問題は、最初のforループを実行するたびに2d配列を再作成しているようです。

これを解決するために、あなたは初めに利用できるコースの数を定義する必要があります。

BufferedReader inData = new BufferedReader(new InputStreamReader(System.in)); 
    String[][] sbjName = null; 
    String data; 
    int noSem = 2; 
    int noCourse = 3; // say there are 3 courses that are available 

    try { 

     System.out.print("Enter no of semester : "); 
     data = inData.readLine(); 
     noSem = Integer.parseInt(data); 
     System.out.print("Enter number of courses available : "); 
     data = inData.readLine(); 
     noCourse = Integer.parseInt(data); 
     sbjName = new String[noSem][noCourse]; 
     // Semester loop 
     for (int i = 0; i < noSem; i++) { 

      System.out.println("\n\tSemester" + (i + 1)); 
      System.out.print("Enter number of course : "); 
      data = inData.readLine(); 
      int courseNum = Integer.parseInt(data); 

      // course details loop 
      for (int u = 0; u < courseNum; u++) { 

       System.out.println("Enter Course Code : "); 
       System.out.print("Enter Course Name : "); 

       sbjName[i][u] = inData.readLine(); 

       System.out.println("Enter Credit Hour : "); 
       System.out.println("Enter Marks : "); 
       System.out.println("\n"); 

      } 
     } 

     for (int x = 0; x < noSem; x++) { 
      for (int y = 0; y < noCourse; y++) { 
       System.out.println(sbjName[x][y]); 
      } 
     } 

    } catch (Exception e) { 

    }