Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用户输入了数组大小的输入,但数组大小不为';不等于用户输入_Java - Fatal编程技术网

Java 用户输入了数组大小的输入,但数组大小不为';不等于用户输入

Java 用户输入了数组大小的输入,但数组大小不为';不等于用户输入,java,Java,谁能告诉我为什么数据定义类中titles数组的数组大小不等于用户输入的值,该值是从实现类传入的,并设置为数据定义类中的实例变量 这是数据定义类 public class Photograph { private int maxTakes; public Photograph() { this.titles = new String[this.maxTakes]; numPhotosTaken = 0; } public void setMa

谁能告诉我为什么数据定义类中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;
      }
   }
}

创建一个接受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;
        }
    }
}
类照片{
私有整数最大值;
私有字符串[]标题;
纽普霍托斯塔肯私人酒店;
公共照片(int maxTakes){
this.maxTakes=maxTakes;
this.titles=新字符串[maxTakes];
numPhotosTaken=0;
}
公共布尔集合标题(字符串标题){
if(this.numPhotosTaken
创建一个接受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;
        }
    }
}
类照片{
私有整数最大值;
私有字符串[]标题;
纽普霍托斯塔肯私人酒店;
公共照片(int maxTakes){
this.maxTakes=maxTakes;
this.titles=新字符串[maxTakes];
numPhotosTaken=0;
}
公共布尔集合标题(字符串标题){
if(this.numPhotosTaken
在调用
setMaxTakes()
之前已创建数组。在创建长度为
maxTakes
的数组后,更改
maxTakes
的值不会有任何效果

您需要将
setMaxTakes()
的方法更改为以下内容:

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

或者使用@Gremash发布的答案(这是正确的方法)。

在调用
setMaxTakes()
之前,已经创建了数组。在创建长度为
maxTakes
的数组后,更改
maxTakes
的值不会有任何效果

您需要将
setMaxTakes()
的方法更改为以下内容:

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

或者使用@Gremash发布的答案(这是正确的做法)。

你能告诉我是什么让你认为大小不一样吗?输出/错误堆栈?您的数组在构造函数中使用值
maxTakes
进行初始化,调用构造函数时,该值为0。当我尝试输入照片标题时,总是会收到错误消息“不允许更多照片”的提示。您能告诉我是什么让您认为大小不一样吗?输出/错误堆栈?您的数组在构造函数中使用值
maxTakes
初始化,调用构造函数时该值为0。当我尝试输入照片标题时,总是会收到错误消息“不允许更多照片”的提示实际上我正在更新我的答案,以包括亚辛建议的代码,但他打了我一顿:我实际上是在更新我的答案中,包括亚辛提出的代码,但他把我打败了: