2016-10-14 124 views
0

我已經創建了一個程序來接受來自用戶的輸入並將存儲在二維數組中。舉例情況,用戶輸入學期= 2的輸入號;那麼當然也沒有= 2 ;.我的循環工作正常,但數據存儲不好。二維數組數據null?

輸出: 空 空 空 INPUT4

應該是這樣的: 輸入1 輸入2 輸入3 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

提示:您需要進入循環前一個分配,並在外部循環的每次迭代,你應該做另一個分配。 – 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]; 

這條語句創建期間每個迭代陣列。換句話說:你扔掉你之前創建的數組;因此您之前存儲在這些陣列中的任何信息都會被丟棄!

您只想撥打一次;所以你把它移動你的循環外

+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) { 

    }