1

私のJavaクラスでは、配列について学習していましたが、この質問が出てきました。私はそれを解決しようとしましたが、要件を満たせないようです。ユーザー入力を読み込んで、5つの要素(他の要件の1つ)に制限することができます。また、値は10から100の間でなければなりません。これも実行しました。しかし、重複した値を「印刷しない」ようには見えません。配列は重複する値を受け入れます。印刷するだけでなく、取り出す必要はありません。これまでの私のコードは次のとおりです。

import java.util.Arrays;
import java.util.Scanner;

public class ArrayTest {

static Scanner in = new Scanner(System.in);

public static void main(String[] args) {

    int size = 5;
    int InpNum[] = new int[size];

    for (int i = 0; i < InpNum.length; i++){

    while (InpNum[i] <= i){

        System.out.println("Please type a number between 10 and 100: ");
        InpNum[i] = in.nextInt();

        while (InpNum[i] < 10 || InpNum[i] > 100){
            System.out.println("Error: Please type an integer between 10 and 100: ");
            InpNum[i] = in.nextInt();
        }

        Arrays.sort(InpNum);

        System.out.println(Arrays.toString(InpNum));

        }

        while (Search(InpNum, i) == true){
            System.out.println("ERROR: Please enter a number that is not a duplicate of the other numbers you have entered");
            InpNum[i] = in.nextInt();
        }

    }

}

// I can't seem to implement the method below in a useful manner.

    public static boolean Search(int InpNum[], int searchedNum) {

    for(int i : InpNum) {

        if (i == searchedNum) {

            return true;
        }
    }

    return false;
}
}   
4

3 に答える 3

0

怠惰な方法は、値を保持できる2番目の配列を作成することです。

入力配列をループし、その配列にまだその要素がない場合は、現在の要素を新しい配列に配置します。次に、古いアレイを弱めたアレイと交換します。

于 2012-04-07T20:45:27.287 に答える
0

アプリケーションの再構築を検討します。

ユーザーが入力した数値をすぐに配列に配置する代わりに、ローカル変数に格納します。次に、実行する必要のあるすべてのチェックを実行し、すべてに合格した場合にのみ配列に追加します。

whileプログラム全体(外側のループ)にはループが1つだけ必要です。他のすべての人は問題を大いに混乱させ、問題を必要以上に難しくしています。

したがって、疑似コードでは:

int index = 0;
while (true)
{
  int num = in.nextInt();

  // if not between 10 and 100, continue
  // if it would make the array larger than 5, continue
  //    (or perhaps break out of the loop, since we've filled the array)
  // if it is already in the array, continue

  // all the checks passed, so add it to the array!
  InpNum[index++] = num;
}

ちなみに、本当に必要なのはセットです。これは重複がないことが保証されているコレクションであり、 「この値が含まれていますか?」という質問に答えることができます。メソッドを使用して効率的な方法でSet.contains( Object )

したがって、TreeSetまたはHashSetを作成し、ユーザーが入力するすべての数値を入力します。その場合、関数は、セットを呼び出すSearch1つのライナーcontains( searchedNum )になります。

于 2012-04-07T20:49:00.020 に答える
-1

最も簡単な方法
だから私がすることは最初に番号を尋ねることです。次に、配列内に入力する前に、数値を変数に保存します。次に、その番号が検索ですでに含まれているかどうかを確認します。もしそうなら、私は新しい番号を求めます。そうでない場合は、10から100の間であるかどうかを確認し、そうでない場合は、新しいものを要求します。フィットするのは、配列内に入力することです。ソートが毎回配列を混同するため、空の場所がどこにあるかを確認する必要があります

import java.util.Arrays;
import java.util.Scanner;
public class ArrayTest
{

static Scanner in = new Scanner(System.in);

public static void main(String[] args) {

    int size = 5;
   int InpNum[] = new int[size];

   for (int i = 0; i < InpNum.length; i++){
       System.out.println("Please type a number between 10 and 100: ");
       int number = in.nextInt();
    //while (InpNum[i] <= i){
        while (Search(InpNum, number) == true){
            System.out.println("ERROR: Please enter a number that is not a duplicate of the other numbers you have entered");
            number = in.nextInt();
      }



       while (number < 10 || number > 100){
        System.out.println("Error: Please type an integer between 10 and 100: ");
        number = in.nextInt();
       }

       int counter = 0;
       for (int j = 0; j < InpNum.length && counter == 0; j++){
          if(InpNum[j] == 0){
             InpNum[j] = number;
             counter++;
          }

      }
       Arrays.sort(InpNum);

       System.out.println(Arrays.toString(InpNum));

       //}



   }

 }

 // I can't seem to implement the method below in a useful manner.

   public static boolean Search(int InpNum[], int searchedNum) {

     for (int i = 0; i < InpNum.length; i++){

       if (InpNum[i] == searchedNum) {

        return true;
       }
   } 

   return false;
  }
  }   
于 2012-04-07T21:01:04.360 に答える