2016-03-30 94 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(这是做正确的方式)的答案去。