0

10 個の数字の配列を作成し、その配列を重複なしで新しい配列にコピーする必要があります。重複を取り除くところまで到達しましたが、何らかの理由で、数値がまだ新しい配列にないと判断した後、そこに入れられません。これは私がこれまでに持っているものです。ありがとう。

 import java.util.*;
 import java.io.*;
 public class PrintingDistinctNumbers
 {
   public static void main(String[] args)
   {
     int[] array=new int[10];
     int[] array2=new int[10];
     int num1;
     int count = 0;
     boolean results;
     //let the user input 10 numbers
     for(int i=0;i<array.length;i++)
     {
       Scanner input=new Scanner(System.in);
       System.out.println("please enter 10 numbers");
       num1=input.nextInt();
       array[i]=num1;
     }

     for (int j=0;j<array.length;j++)
     {
       results=search(array2 ,array[j],count);
       if(results=false);
       { 
         array[j]=array2[count];
         count++;
         break;
       }

     }
     // just a test to make sure the numbers copied over to the new array 
     System.out.println(array2[0]);
   }



   //search the second array to see if the int is allready in it 
   public static boolean search(int[] array2,int value,int count2)
   {
     //create variables
     boolean found;
     //set the variables
     found= false;
     //search the array
     for(int index=0;index<count2;index++)
     {
       if(array2[index]==value)
       {
         found=true;
         break;
       }
     }
     return found; 


   }

 }
4

3 に答える 3

4

残りのロジックを見なくても、これは

 if(results=false);

正しく見えません

  1. それはタイプミスですか?if (results == false)、またはもっと簡潔に言うと、if (!results)
  2. 末尾のセミコロンに注意してください。これは、if句の評価に関係なく、次のブロックが実行されることを意味します。は;、完全に有効な空のブロックを作成しています。
于 2013-02-26T09:20:17.260 に答える
0

2 つのバグがあります。

  1. if ブロック内のbreak;ステートメントはそこにあるべきではありません: ループから抜け出してしまいますが、すべての要素がコピーされるまで配列を反復処理し続けるループが必要です。
  2. テストは結果を比較するのではなく、false を結果に割り当てているため、次のように変更します。if (!result)

いくつかのスタイルの問題もあります:

  1. あなたの検索方法は非常に長いです。found変数は必要ありません
  2. メソッド内で意味のある名前を付けてパラメーターに名前を付けarray2ます。同じarrayarray1count2
  3. ifor ループ varを好むindex- 入力することも読むことも少ない

これは、次のようになります。

public static boolean search(int[] array, int value, int count) {
  for(int i = 0; i < count; i++) {
    if (array[i] == value) {
      return true;
    }
  }
  return false;

}

あなたの主な方法では、なぜ1つのループとi次のループがあるのjですか? 両方を作成しiます。ループ変数はループ内でのみスコープを持つため、衝突はありません。

于 2013-02-26T11:27:44.470 に答える
0

if (results=false)ブライアン・アグニューがすでに言及したことに加えて、私はこれを見ます:

  array[j]=array2[count];

入力を格納した配列の値を、初期化されていない 2 番目の配列の値で上書きします。あなたはおそらくそうするつもりでした

  array2[count] = array[j];

ここ。

于 2013-02-26T11:40:33.773 に答える