1

在我的 Java 课程中,我们正在学习数组,然后出现了这个问题。我试图解决它,但似乎无法满足要求。我可以读取用户输入并将其限制为仅 5 个元素(其他要求之一),而且值必须在 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

一种懒惰的方法是只创建一个可以随时保存值的第二个数组。

遍历输入数组并将当前元素放入新数组中,如果该数组还没有该元素。然后用淘汰的阵列替换旧阵列。

于 2012-04-07T20:45:27.287 回答
0

我会考虑重组您的应用程序。

与其将用户输入的数字立即放入数组中,不如将其存储在局部变量中。然后运行您需要运行的所有检查,并且仅当它通过所有检查时才将其添加到数组中。

while您应该在整个程序中只有一个循环(外部循环)。所有其他人都极大地混淆了这个问题,并使问题变得比它必须的要困难得多。

所以,在伪代码中:

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。这是一个保证没有重复的集合,并允许您回答“我是否包含此值?”的问题。以一种有效的方式使用该方法Set.contains( Object )

所以我会创建一个TreeSetHashSet并将用户输入的每个数字都放入其中。然后,您的Search函数将只是调用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 回答