gpt4 book ai didi

Java:返回添加到数组中的数字

转载 作者:行者123 更新时间:2023-12-01 07:49:49 27 4
gpt4 key购买 nike

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

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;
}

这是正在执行 getNumberOfReviews 方法的单元测试:

public class Grader {

@Grade(points=10)
@Test
public void testGetNumberOfReviews()
{
GameInfo gi=new GameInfo("SomeGame");
Assert.assertEquals(0,gi.getNumberOfReviews());
gi.addReview(new Review("cool",5));
Assert.assertEquals(1,gi.getNumberOfReviews());

gi.addReview(new Review("terrible",1));
Assert.assertEquals(2,gi.getNumberOfReviews());
}

@Grade(points=15)
@Test

我的代码可以编译,但没有通过我的单元测试。如果通过并且我没有得到任何分数,我将得到 15 分。请指出我做错了什么。

更新

我的代码可以编译,但我的单元测试仍然因 getNumberofReviews 方法而失败。有什么帮助可以解释为什么吗?

最佳答案

您的代码的问题在于您使用 reviews 数组的长度来确定评论的实际数量,并且在您的单元中该长度始终为 10测试。仔细看看你的代码:

private Review[] reviews = new Review[10];

然后在您的 getNumberOfReviews() 方法中根据此长度计算计数:

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

因此,评论的表观数量始终显示为 10,并且您的单元测试断言失败。

如果你坚持使用固定大小的数组来存储评论(我不喜欢,我宁愿使用ArrayList),那么你需要维护一些状态,一个计数器,在您的 GameInfo 类中,该类跟踪您放入数组中的评论的实际数量:

class GameInfo {
private int numReviews = 0;

public void addReview(Review r) {
this.reviews[numReviews++] = r;
}

// ...
}

更新:

如果您想使用 ArrayList 来存储您的评论,骨架代码将如下所示:

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

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

public int getNumberOfReviews() {
return reviews.size();
}
}

这里使用 Java 集合(在本例中为 ArrayList)的优点是多方面的。首先,它会随着您添加评论而自动增长,您无需担心这一点。另外,如果您需要获取尺寸等特征,则此状态是集合的一部分,因此您不需要跟踪单独的计数。

关于Java:返回添加到数组中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40122087/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com