ねえ、誰かがこれをさらに説明できるかどうか疑問に思っていました. これは課題ではなく、私が受けたテストの 1 つの解決策です。私はそれを理解しようとしてきましたが、よくわかりません..
基本的に、与えられた答えの質問は次のとおりです。
[i] Java で RangeSet というクラスを作成します。このクラスはブール値の配列のデータ構造を使用して、3 つのメソッドを使用して整数のセットを表します。 [list] [ ]add - アイテムを追加しますが、アイテムが既にセットのメンバー [ ]remove - アイテムを削除しますが、アイテムがセットのメンバーでない場合はセットを変更しません [*]contains - アイテムがセットのメンバーであるかどうかを示すブール値を返します [/list ]
クラスには、整数 n を取り、1 から n までの範囲の整数を保持できるセットを表すオブジェクトを与えるコンストラクターが 1 つ必要です。コンストラクターは空のセットを与える必要があります。セットは破壊的でなければなりません。セットが操作によって変更された場合、メソッドは true を返し、そうでない場合は false を返す必要があります。[/i]
基本的には、1 から n の範囲に制限された整数のセットであり、ブール値の配列によって実装されます。add メソッドと remove メソッドは、呼び出しによってセットが変更されたかどうかを示すブール値を返します。メソッド add、remove、contains は 1 から n の範囲内になるため、引数が範囲内にない場合に対処する特別なコードはありません。
class RangeSet
{
private boolean[] arr;
public RangeSet(int n)
{
arr = new boolean[n];
}
public boolean add(int n)
{
if(arr[n-1]) return false;
arr[n-1]=true;
return true;
}
public boolean remove(int n)
{
if(!arr[n-1]) return false;
arr[n-1]=false;
return true;
}
public boolean contains(int n)
{
return arr[n-1];
}
}
どうして arr = new boolean[n] と add(int n) の両方が 'n' で表されるのでしょうか? ソリューションは、実際の値をチェックする代わりに、新しく入力された整数の場所をチェックしませんか? ありがとうございました。