Java:返回号添加到数组中

Java:返回号添加到数组中,java,arrays,Java,Arrays,我正在编写一个程序,其中需要返回添加到数组中的评论数。这是我到目前为止所拥有的 package assignment; import java.text.MessageFormat; import java.util.Scanner; import java.awt.Point; import java.awt.Dimension; import java.awt.Rectangle; import java.time.LocalDate; class Review { publ

我正在编写一个程序,其中需要返回添加到数组中的评论数。这是我到目前为止所拥有的

package assignment;

import java.text.MessageFormat;
import java.util.Scanner;

import java.awt.Point;
import java.awt.Dimension;
import java.awt.Rectangle;

import java.time.LocalDate;

class Review {
    public String reviewText;
    public int numberOfStars;

    public Review(String reviewText, int numberOfStars) {
        this.reviewText=reviewText;
        this.numberOfStars=numberOfStars;
    }
}
class GameInfo {
    private String title;
    private Review[] reviews = new Review[10];
    // need an array to keep the reviews; I suggest as below, but feel free to use something else
    // your array needs to be able to contain *at least 10* reviews. My tests will not add more than 10 (later we'll see better collections)
    // private Review[] reviews;
    // can add any other fields; for example, one to keep track of how many reviews you actually have (your array may contain up to 10, but at any given time may have way less; even 0)

    public GameInfo(String title) {
        this.title=title;
        this.reviews= reviews;
        // you may want to initialize any other variables you create here
    }

    public String getTitle() {
        return title;
    }


    // TODO - adds the review to the 'array' of reviews. You need to keep all reviews in an array
    public void addReview(Review r) {
    int i = 0;
    while (i < this.reviews.length && this.reviews[i++] == null);
    if (i < this.reviews.length) this.reviews[i] = r;
}
    // TODO - returns the number of reviews which have been added to this GameInfo
    public int getNumberOfReviews() {
        int count = 0;
        for (int i = 0; i < this.reviews.length; ++i) {
            ++count;
        }
        return count;
    }
我的代码可以编译,但没有通过单元测试。如果它通过,我将得到15分,而我没有得到任何分数。请指出我做错了什么

更新


我的代码可以编译,但是使用getNumberofReviews方法进行的单元测试仍然失败。关于原因有什么帮助吗?

您的代码的问题是,您使用
评审
数组的长度来确定评审的实际数量,在单元测试期间,该长度始终为10。仔细查看您的代码:

private Review[] reviews = new Review[10];
然后在
getNumberOfReviews()
方法中,根据此长度计算计数:

for (int i = 0; i < this.reviews.length; ++i) {
    ++count;
}
更新:

如果您想使用
ArrayList
存储您的评论,那么框架代码如下所示:

class GameInfo {
    private List<Review> reviews = new ArrayList<>();

    public void addReview(Review r) {
        reviews.add(r);
    }

    public int getNumberOfReviews() {
        return reviews.size();
    }
}
class游戏信息{
私有列表评论=新建ArrayList();
公开审查(审查r){
增加(r);
}
public int getNumberOfReviews(){
返回评论。size();
}
}

在这里使用Java集合(在本例中为
ArrayList
)的优点是多方面的。首先,当你添加评论时,它会自动增长,你不必担心这一点。此外,如果您需要获取特性,例如大小,则此状态是集合的一部分,因此您不需要跟踪单独的计数。

代码的问题是,您使用
审阅
数组的长度来确定实际审阅数,并且在单元测试期间,此长度始终为10。仔细查看您的代码:

private Review[] reviews = new Review[10];
然后在
getNumberOfReviews()
方法中,根据此长度计算计数:

for (int i = 0; i < this.reviews.length; ++i) {
    ++count;
}
更新:

如果您想使用
ArrayList
存储您的评论,那么框架代码如下所示:

class GameInfo {
    private List<Review> reviews = new ArrayList<>();

    public void addReview(Review r) {
        reviews.add(r);
    }

    public int getNumberOfReviews() {
        return reviews.size();
    }
}
class游戏信息{
私有列表评论=新建ArrayList();
公开审查(审查r){
增加(r);
}
public int getNumberOfReviews(){
返回评论。size();
}
}

在这里使用Java集合(在本例中为
ArrayList
)的优点是多方面的。首先,当你添加评论时,它会自动增长,你不必担心这一点。此外,如果您需要获取功能,例如大小,此状态是集合的一部分,因此您不需要记录单独的计数。

两个问题。您总是返回数组的长度,而不是评论的数量

初始化数组时,有10个空元素。问题的目标是跳过数组,找到第一个非空元素并设置它

然后,您已经有了一个Review对象,所以您只需将其设置为数组位置,而不是在方法中再次进行
新的Review

例如,使用while循环更新放置数据的位置。一旦达到这一点,你要么在列表的末尾,要么在中间。如果列表已满,您将得到一个异常,因此您可以进行检查

public void addReview(Review r) {
    int i = 0;
    while (i < this.reviews.length && this.reviews[i++] == null);
    if (i < this.reviews.length) this.reviews[i] = r;
}
public void addReview(Review r){
int i=0;
而(i

可以使用相同的概念来查找数组中非空元素的“长度”,这是评论的真实数量。您总是返回数组的长度,而不是评论的数量

初始化数组时,有10个空元素。问题的目标是跳过数组,找到第一个非空元素并设置它

然后,您已经有了一个Review对象,所以您只需将其设置为数组位置,而不是在方法中再次进行
新的Review

例如,使用while循环更新放置数据的位置。一旦达到这一点,你要么在列表的末尾,要么在中间。如果列表已满,您将得到一个异常,因此您可以进行检查

public void addReview(Review r) {
    int i = 0;
    while (i < this.reviews.length && this.reviews[i++] == null);
    if (i < this.reviews.length) this.reviews[i] = r;
}
public void addReview(Review r){
int i=0;
而(i

可以使用相同的概念来查找数组中非空元素的“长度”,即真正的审阅次数

您是否尝试使用调试器单步执行代码?还有,你为什么要计算评论的数量?实际上,您返回了需要重新考虑的数组长度
addReview
。它没有做它的名字。谢谢,我没有使用调试器。我对Java非常陌生,我还在学习。我如何返回数组的长度?@cricket\u 007这是一个静态数组,长度在这里没有帮助。请创建一个能清楚说明问题的数组。您的代码存在多个问题,并且不清楚您需要解决什么特定问题您是否尝试过使用调试器逐步完成代码?还有,你为什么要计算评论的数量?实际上,您返回了需要重新考虑的数组长度
addReview
。它没有做它的名字。谢谢,我没有使用调试器。我对Java非常陌生,我还在学习。我如何返回数组的长度?@cricket\u 007这是一个静态数组,长度在这里没有帮助。请创建一个能清楚说明问题的数组。您的代码存在多个问题,不清楚您需要解决哪些特定问题我不坚持使用固定大小的数组来存储评论。你能和我分享一下你的方法吗?谢谢again@rls1982您的代码稍后将包含我们将看到更好的集合。。。也许最好等到你了解了ArrayListHanks@TimBiegeleisen之后,我非常感激它,当我编译的时候,我得到了以下信息