Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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_Oop - Fatal编程技术网

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

Java 难以理解如何使用类维护状态,java,oop,Java,Oop,我不熟悉使用OOP,我通常只将所有代码放在一个类中并使用方法。但是我想维护状态信息,并且认为类是最合适的,但是我很难理解它 假设我有一个项目列表,当列表中所有先前项目的总和等于X时,我想停止(在本例中为10,因此需要项目1+2,然后2+3等,直到达到阈值10),我可以使用一种方法来计算它,但它需要我重新进行整个过程,而我真正需要做的是增加最后一项,然后看看我的数据是否超过阈值。这是我到目前为止的代码,但我知道它不好,因为尽管它可以工作,但它实际上只是使用类作为独立的方法,并在每个循环上重新计算。

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


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

有什么建议吗

代码:

公共类学习类计数器{
公共静态void main(字符串[]args){
int[]list=新的int[]{1,2,3,4,5,6,7,8,9,10};
int[]data_list=新int[list.length];
对于(int当前位置=0;当前位置=10){
返回false;
}否则{
返回true;
}
}
}

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

因此解决方案是不直接更新
数据列表。相反,在
计数器
类中有一个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;
    }
}

因此,解决方案是不直接更新
数据列表。相反,在
计数器
类中有一个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;
    }
}

你想的太多了,在这种情况下不需要反类

我还对你为什么要做这行感兴趣:

data_list[current_location] = (list[current_location]+1);
是否希望数据列表与列表相同,但每个值都递增1


若你们只是想返回一个小于10的值的子数组,我建议在for循环中这样做,并使用int作为计数器。

你们已经考虑过了,在这种情况下,计数器类并不是真的必要

我还对你为什么要做这行感兴趣:

data_list[current_location] = (list[current_location]+1);
是否希望数据列表与列表相同,但每个值都递增1



若你们只是想返回一个小于10的值的子数组,我建议你们在for循环中这样做,使用int作为计数器。

我不知道您想用它做什么。@techjunkie.css我很乐意澄清您理解困难的任何特定部分。我也不知道您想实现什么,但我想指出的是,您在check\u data方法中声明了一个局部变量total\u迄今为止,它隐藏了total_so_far实例变量。我怀疑你是否有意这么做。“假设我有一个项目列表,当列表中所有之前项目的总和等于X时,我想停止”-停止什么?将项目复制到第二个列表中?我强烈建议您在类上做一些基本的java教程。我不知道您想用它做什么。@techjunkie.css我很高兴澄清您在理解上有困难的任何特定部分。我也不知道您想做什么,但我想指出的是,您在check_data方法中声明了一个局部变量total_so_far,它隐藏了total_so_far实例变量。我怀疑你是否有意这么做。“假设我有一个项目列表,当列表中所有之前项目的总和等于X时,我想停止”-停止什么?将这些项目复制到第二个列表中?我强烈建议您做一些关于类的基本java教程。对此我很抱歉,我应该解释一下。那个区域只是为了做点什么而做的虚拟工作。我真正的程序在那里做实际的工作,但举个例子,我只是在那里放了一些随机的东西,可以是任何数学函数。问题的重点是了解如何在不重新计算的情况下监控某些阈值。对此我很抱歉,我应该解释一下。那个区域只是为了做点什么而做的虚拟工作。我真正的程序在那里做实际的工作,但举个例子,我只是在那里放了一些随机的东西,可以是任何数学函数。问题的关键是要理解我如何在不重新计算的情况下监控某些阈值。谢谢,这似乎是一种更好的方法,但我的实际程序相当大,这将导致我更改大量代码。是否可以使用类来维护某种计数器,然后在达到某种条件时(通过方法)通知我?是的。编写一个类来维护某种类型的计数器,然后(通过方法)让您知道何时达到某个条件。如果你的问题如此含糊,不要期待一个好的答案。GIGOThanks,我来试试你的建议。抱歉说得含糊不清。我通常会提出非常具体的问题,因为我通常只想解决一个问题,然后继续前进。在这种情况下,因为我试图学习,所以我选择了一个更一般的问题,这样我就可以从那里建立我的理解。顺便说一句,谢谢你,你的方法非常有效。我将对其进行更多的修改以了解更多内容,但我认为我现在可以将该逻辑应用到代码库的其他领域。非常感谢(再次为这个奇怪的问题感到抱歉),你确实在逻辑上帮了我很多。谢谢,这看起来确实是一个更好的方法,但我的实际程序相当大