-4

exploreメソッドに問題があります()高さが高さの最大値で、幅が保存されている画像の幅の合計である画像を作成する必要があります。アルバム内の画像はこれまでにコピーする必要があります。新しい画像に変換すると、その画像でexplore()メソッドを呼び出すことでその画像が表示されます。これは私が持っているものです:

public boolean addPicture( Picture thePicture, int where )
{
int index = nPictsInAlbum;
pictArray[index] = pictArray[index-1];

while( index > where )
{
pictArray[where] = thePicture;
nPictsInAlbum ++;
}
return true;
}

public void explore()
{    
int maxHeight = 0;  //max height for the picture
int value = 0;
int biggest = 0;

for(int i = 0; i < pictArray.length; i++)
{
nPictsInAlbum = pictArray[i];
if(value > maxHeight)
{
biggest = value;
maxHeight = i;
}
}
4

1 に答える 1

0

最大の変数は、合計幅を保持している変数であると想定しています。

コードでいくつか間違ったことをしており、まずこれらを修正する必要があります

  1. さまざまなタイプの変数に対して nPictsInAlbum を複数回再利用しています。あなたはそれをすべきではありません。私は Java プログラマーではありませんが、混乱の原因となるため、少なくとも他の言語では悪い習慣です。メソッドでその変数を使用してaddPicture、最新のインデックスを追跡します。ただし、exploreメソッドでは、アクセスしている個々の画像を一時的に保存するために使用します。

  2. メソッドではexplore、画像オブジェクトのプロパティ\フィールドにアクセスしていません。画像オブジェクトが持つプロパティ\フィールドがわからない場合、コードを完全に修正することはできません。

これら 2 つの問題を修正すると、exploreメソッドに含まれる論理エラーは次のようになります。

  1. (変数が全幅であると仮定すると、biggestよりわかりやすい名前に変更する必要があります)現在の画像の高さが以前に保存された高さよりも大きいことがわかった場合にのみ、全幅を設定しています写真。各画像をループするときは、常に合計幅を設定する必要があります。

  2. 画像の合計幅を設定すると、合計を追加するのではなく、合計を置き換えることになります。あなたの例でbiggest = valueはそれを追加しません。biggest = biggest + valueあなたはそれをしたいでしょう


メソッドを作成するときは、必ず時間をかけてください。何をするのか、どの変数が必要なのか、他にどの変数にアクセスするのか、そしてそれらをどうするのかを巧みに考えてください。たとえば、ポイントがexplore最大の高さと合計の幅を決定することである場合、次のように考えます。

  1. すべての画像の最大高さを決定する再利用可能なコードが必要です。また、すべての画像の合計幅も取得します。
  2. したがって、maxHeight と totalWidth の 2 つの変数が必要になります。
  3. このコードから、画像の配列を反復処理する必要があります。
  4. そのループでは、画像の高さが maxHeight より大きいかどうかを確認する必要があります。その場合、maxHeight を画像の高さに設定する必要があります
  5. 画像の高さにアクセスするには、picture.height プロパティを使用する必要があります (画像のオブジェクト構造がわからないので推測しています)。
  6. 画像の高さに関係なく、現在の合計に画像の幅を追加する必要があります。だから私は使うだろうtotalWidth = totalWidth + picture.width

これが、コードをクリーンアップしてより適切に機能させるのに役立つことを願っています。

于 2012-12-09T01:08:52.627 に答える