gpt4 book ai didi

java - 难以理解如何使用类维护状态

转载 作者:行者123 更新时间:2023-12-02 00:24:42 26 4
gpt4 key购买 nike

我是 OOP 的新手,我通常只是将所有代码放在一个类中并使用方法。但我想维护状态信息并认为类是最合适的,但我很难理解它。

假设我有一个项目列表,当列表中所有先前项目的总和等于 X(在本例中为 10,因此需要项目 1 + 2,然后是 2+3.etc..)时,我想停止它达到阈值 10),我可以使用一种方法来计算它,但这需要我重新执行整个过程,而我真正需要做的就是增加最后一项,然后查看我的数据是否超过阈值。到目前为止,这是我的代码,但我知道它不好,因为虽然它有效,但它实际上只是使用该类作为独立方法并在每个循环上重新计算。我的目标是,如果不需要检查阈值,则使用此结构减少循环。

有什么建议吗?

代码:

public class LearningClassesCounter {
public static void main(String[] args) {
int[] list = new int[]{1,2,3,4,5,6,7,8,9,10};
int[] data_list = new int[list.length];
for (int current_location = 0; current_location<list.length;current_location++) {
//can only put commands in here. Nothing above.
Counter checker = new Counter(data_list);
System.out.println(checker.check_data(current_location));
for (int i =0; i<100; i++){
if (checker.check_data(current_location) == false) {
break;
}
data_list[current_location] = (list[current_location]+1); //this is just a random function, it could be any math function I just put it in here to show that some work is being done.
}
}
//its done now lets print the results
for (Integer item : data_list) {
System.out.println(item);
}
}
}


class Counter {
private int[] data_list;
private int total_so_far;
// create a new counter with the given parameters
public Counter(int[] data_list) {
this.data_list = data_list;
this.total_so_far = 0;
}

public boolean check_data(int current_location) {
// TODO Auto-generated method stub
int total_so_far = 0;
//System.out.println(total_so_far);
for (int item : data_list) {
total_so_far = item + total_so_far;
if (total_so_far >= 10) {
break;
}
}

if (total_so_far>=10) {
return false;
} else {
return true;
}
}

}

我不需要任何人来修复我的代码或任何东西(我想自己做,代码只是为了让我了解我在做什么)。我对我的逻辑缺陷更感兴趣,这也许是我更好地思考设计类的一种方式,这样我就可以更好地将它们应用到我自己的情况中。

最佳答案

所以解决方案是不要直接更新data_list。相反,在 Counter 类中使用一个 setter 方法来更新索引和值。它更新数组中的值并更新计数值。

类似这样的事情:

class Counter{
private final int[] list;
private count = 0;
private final maxCount = 10;


public Counter(int[] list){
this.list = list;
}

public boolean updateValueAndCheckPastMax(int index, int value){
list[index] = value;
count += value;
return count >= maxCount;
}
}

关于java - 难以理解如何使用类维护状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10249997/

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