私はOOプログラミングが初めてで、概念を使用するためのプログラムの設計に少し問題があります。チュートリアルを完了しましたが、まだ問題があります。
私はアイテムの値(この例では何でも、株)を取り、特定の値(このコードでは100)に等しくなるために必要なアイテムの数を計算する再帰を持っています。この部分は機能しますが、株式の加重がしきい値を超えているかどうかを知りたいです。もともと私は for ループを実行して値のリスト全体を計算する方法でこの問題に取り組みましたが、再帰のすべてのループでそれを行うため、これは非常に非効率的です。クラスを使用して状態情報を維持し、各ループで値をインクリメントするだけで、しきい値に達すると通知されるため、クラスを学習するのに良い時期だと思いました。
私はコードを持っていると思いますが、クラスでこの問題を設計する方法を完全には理解していません。これまでのところ、再帰の各ステップでループが実行されます。最初は私がそこのクラスだからです。これを設計するより良い方法はありますか?私の最終目標は、重み付けを超えたときに通知を受けることです(これはすでにある程度可能です)が、最小限のリソースを使用する方法で行いたいです(非効率的/不要な for ループを回避します)
コード (学習に使用したコード全体を次に示しますが、問題は Counter クラスとその findVariables メソッド内の場所にあります):
import java.util.Arrays;
public class LearningClassCounting {
public static int[] stock_price = new int[]{ 20,5,20};
public static int target = 100;
public static void main(String[] args) {
// takes items from the first list
findVariables(stock_price, 100, new int[] {0,0,0}, 0, 0);
}
public static void findVariables(int[] constants, int sum,
int[] variables, int n, int result) {
Counter Checker = new Counter(stock_price, variables);
if (n == constants.length) {
if (result == sum) {
System.out.println(Arrays.toString(variables));
}
} else if (result <= sum){ //keep going
for (int i = 0; i <= 100; i++) {
variables[n] = i;
Checker.check_total_percent(n, i);
findVariables(constants, sum, variables, n+1, result+constants[n]*i);
}
}
}
}
class Counter {
private int[] stock_price;
private int[] variables;
private int value_so_far;
public Counter(int[] stock_price, int[] variables) {
this.stock_price = stock_price;
this.variables = variables;
for (int location = 0; location < variables.length; location++) {
//System.out.println(variables[location] + " * " + stock_price[location] + " = " + (variables[location] * stock_price[location]) );
value_so_far = value_so_far + (variables[location] * stock_price[location]);
}
//System.out.println("Total value so far is " + value_so_far);
//System.out.println("************");
}
public void check_total_percent(int current_location, int percent) {
// Check to see if weight exceeds threshold
//System.out.println("we are at " + current_location + " and " + percent + " and " + Arrays.toString(variables));
//System.out.println("value is " + stock_price[current_location] * percent);
//formula I think I need to use is:
if (percent == 0) {
return;
}
int current_value = (stock_price[current_location] * percent);
int overall_percent = current_value/(value_so_far + current_value);
if (overall_percent > 50 ) {
System.out.println("item " + current_location + " is over 50%" );
}
}
}