2016-03-30 90 views
0

誰能告訴我爲什麼數據定義類中titles數組的數組大小不等於用戶輸入的數據從傳入的值實現類並將其設置爲數據定義類中的實例變量?用戶輸入數組大小的輸入,但數組大小不等於用戶輸入

這是數據定義類。

public class Photograph { 

    private int maxTakes; 

    public Photograph() { 
     this.titles = new String[this.maxTakes]; 
     numPhotosTaken = 0; 
    } 

    public void setMaxTakes(int maxTakes) { 
     this.maxTakes = maxTakes; 
    } 

    public boolean setTitle(String title) { 
     if (this.numPhotosTaken < this.titles.length) { 
     this.titles[numPhotosTaken] = title; 
     numPhotosTaken++; 
     return true; 
     } 
     else { 
     return false; 
     } 
    } 
} 

這是實現類。

import javax.swing.JOptionPane; 

public class MakePhotographs { 
    public static void main (String[] args) { 
     Photograph photo; 
     do { 
     photo = create(); 
     } while (JOptionPane.showConfirmDialog(null, "Enter another couple?") == JOptionPane.YES_OPTION); 
    } 

    private static Photograph create() { 
     Photograph photo = new Photograph(); 
     photo.setMaxTakes(Integer.parseInt(JOptionPane.showInputDialog("Enter maximum number of photos to take"))); 

     do { 
     String title = JOptionPane.showInputDialog("Enter title of photo"); 
     if (!photo.setTitle(title)) { 
      JOptionPane.showMessageDialog(null, "No more photos allowed!"); 
     } 
     } while (JOptionPane.showConfirmDialog(null, "Enter another photo?") == JOptionPane.YES_OPTION); 
     return photo; 
    } 
} 
+0

你能告訴是什麼讓你覺得尺寸不一樣嗎?輸出/錯誤堆棧? – user2004685

+3

您的數組在構造函數中使用值「maxTakes」進行初始化,該值在構造函數被調用時爲0. – KevinO

+0

當我嘗試輸入照片的標題時,總會提示錯誤消息「沒有更多的照片允許「 – ush

回答

2

創建一個構造函數在maxTakes價值和使用:

Photograph photo = new Photograph(Integer.parseInt(JOptionPane.showInputDialog("Enter maximum number of photos to take"))); 

您不需要再setMaxTakes,因爲它已經在構造函數中設置。

class Photograph { 

    private int maxTakes; 
    private String[] titles; 
    private int numPhotosTaken; 

    public Photograph(int maxTakes) { 
     this.maxTakes = maxTakes; 
     this.titles = new String[maxTakes]; 
     numPhotosTaken = 0; 
    } 

    public boolean setTitle(String title) { 
     if (this.numPhotosTaken < this.titles.length) { 
      this.titles[numPhotosTaken] = title; 
      numPhotosTaken++; 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 
} 
+1

這是正確的答案。 –

+0

我實際上是在更新我的答案,以包括亞辛建議的代碼,但他擊敗了我:) – Gremash

1

您的數組已創建,然後您可以致電setMaxTakes()。在創建長度爲maxTakes的陣列後,更改maxTakes的值不會完成任何操作。

您需要更改的setMaxTakes()的方法如下:

public void setMaxTakes(int maxTakes) { 
    titles = new String[maxTakes]; 
} 

或張貼@Gremash here(這是做正確的方式)的答案去。