Java中的字符串数组 - 声明固定长度,将值传递给构造函数并添加到构造函数中

时间:2018-04-25 10:00:02

标签: java arrays string

所以,首先,在我的课程中,我需要声明各种领域,包括一个固定长度的演员的字符串数组(5)。我的默认构造函数现在需要设置这些值,但后来我认为我需要将5个字符串值设置为null,这样我就可以将actor添加到极限。 然后,我希望能够使用传递给构造函数的值创建类的实例,最后将actor添加到给定电影的字符串数组中 - 其中有一个免费点(并且在那里有一个例外)不是一个。)

到目前为止我所拥有的:

public class Film {
    private String title;
    private String[] actors = new String[5]; // can I set the limit here and use this string below?
    private double budget;

    // default constructor:
    public Film() {
        title = "Default title";
        // This creates a new string though and doesn't limit to 5 :o(
        authors = new String[] {"a","b","c","d","e"};
        budget = 1.1
    }

    // constructor which takes values passed in:
    public Film(String title, double budget, String[] actors) {
        this.title = title;
        this.budget = budget;
        this.actors = actors;
    }
}

在我的主程序中,我有以下内容显示预算值后的逗号错误,我无法解决原因:

public class Main {

    Film homeAlone = new Film("Home Alone", 10.9, ("McCauley", "John", "Paul", "George", "Ringo"));

}

至于添加演员'方法 - 我不知道从哪里开始。任何帮助将不胜感激!

干杯,

麦克

4 个答案:

答案 0 :(得分:2)

您正在初始化此行中的数组

private String[] actors = new String[5];

再次在这一行

authors = new String[] {"a","b","c","d","e"};

第一个语句创建了一个长度为5的空数组,它确实将其限制为5个元素。如果你写下面的语句,它将抛出一个异常,因为创建的数组有5个只有0 ... 4的区域,只能容纳5个元素

private String[] actors = new String[5];
actors[5]="John";

但是当你编写第二个语句时,你已经通过在构造函数本身中传递6个元素将前一个数组重新初始化为6个元素,并创建了一个长度为6的新数组,其中包含在构造函数中传递的6个元素。

现在再次如果你想执行下面的语句,它将抛出异常。

authors = new String[] {"a","b","c","d","e"};
authors[6]="f";

有关Java中数组的更多信息https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

答案 1 :(得分:2)

为演员使用 varargs

public Film(String title, double budget, String... actors) {
    this.title = title;
    this.budget = budget;
    this.actors = actors;
}

然后你可以用任意数量的演员创建​​一部新电影:

Film a = new Film("Foo", 1.1, "Ringo");
Film b = new Film("Bar", 1.1, "Ringo", "John", "Paul");

删除默认构造函数 - 它没有用处。
不要为字段声明数组;只需代码String[] actors;

答案 2 :(得分:1)

你必须加分号;在budget = 1.1之后

你没有名为authors的变量,你的意思是actors

你无法初始化像

这样的字符串数组
  

(“麦考利”,“约翰”,“保罗”,“乔治”,“林戈”)

必须是new String[]{"McCauley", "John", "Paul", "George", "Ringo"}

我建议您使用像eclipse或netbeans这样的IDE,因为它可以为您提供所有这些问题以及如何解决这些问题的线索

编辑基于OP问题限制为5: 如果你想限制为5,你可以:

  1. 将每个名称作为单独的参数传递,并填充数组中的数组 构造函数
  2. 接受任何大小的数组,只填充前5个

  3. 如果大小超过5的数组,则抛出异常进行验证 通过

答案 3 :(得分:1)

你应该将你的Film课程实例化如下:

Film film = new Film("Movie", 10.00, new String[]{"a", "b", "c","d","e"});

这是因为你想将一个数组传递给Film构造函数。

至于将电影添加到电影中,您可以在电影类中添加一个功能,以验证是否存在免费广告,如果是这种情况,请将其添加到免费广告位。