告诉用户输入的数字是否已存储在数组中

时间:2013-12-18 18:58:18

标签: java

我有这个代码,要求用户输入数组大小(不得超过50),并且数组大小已成功设置为数组。

我的问题出在第二段代码中。 基本上,我希望它存储用户输入的数字(有效)但是,如果数字已经给予数组,则告知用户该数字已经添加并且数字未被存储。示例:用户输入1,4,6,1。当再次给出1时,程序应该告诉用户数字1已经存储在数组中。

我可以做什么来制作程序(我可以使用artoylists .contains,但数组似乎没有这个)

public static void main(String[] args) {

    Scanner reader = new Scanner (System.in);

    int[] listA;

    while (true) {

        System.out.println("Enter array size for listA: ");
        int listAsize = Integer.parseInt(reader.nextLine());

        if (listAsize > 50) {

            System.out.println("Array size must not exceed 50!");

        } else { 

            listA = new int [listAsize];
            //System.out.println(listA.length);
            break;
        }

    }


    int counter = 0;

    while (counter < listA.length) {

        System.out.print("Enter number to add to listA: ");
        int inputListA = Integer.parseInt(reader.nextLine());

        **if (listA.equals(listA[counter])) {**

            System.out.println(inputListA + " was already added to the array, enter a different number");

        } else {


            listA[counter] = inputListA;
            counter++;

        }
    }

6 个答案:

答案 0 :(得分:2)

代码中的问题:

if (listA.equals(listA[counter]))

true

<{1}}

使用int listA[]代替

  • 无需指定初始尺寸
  • 如果元素已存在,
  • HashSet<Integer>将返回add()

答案 1 :(得分:2)

这种情况不正确:

listA.equals(listA[counter])

您需要设置一个从零到counter-1的循环,并根据inputListA值检查每个元素。如果有值,则循环应设置boolean标志,如下所示:

boolean dup = false;
for (int i = 0 ; i != counter ; i++) {
    if (listA[i] == inputListA) {
        dup = true;
        break;
    }
}
// If we went through listA up to count and dup remained false,
// listA must be a new number; otherwise, it's a duplicate.
if (dup) {
    System.out.println(inputListA + " was already added to the array, enter a different number");
}

答案 2 :(得分:2)

如果您需要使用数组

int counter = 0;
while (counter < listA.length) {
    System.out.print("Enter number to add to listA: ");
    int inputListA = Integer.parseInt(reader.nextLine());
    if (found(listA,inputListA,counter)) {
        System.out.println(inputListA + " was already added to the array, enter a different number");
    } else {
        listA[counter] = inputListA;
        counter++;
    }
}

public boolean found (int[]list,int num,int counter){
   for(int i = 0;i<counter;i++){
      if(list[i]==num)
        return true;
   }
   return false;
}

或者您可以使用hashset获得更好的性能

答案 3 :(得分:1)

最简单和最好的解决方案是使用HashSet(http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html

通过将用户限制为仅限于唯一元素,您说'我真的不想要一个数组,我真的想要一套&#39;

答案 4 :(得分:1)

如果必须使用数组,但不限制引入数组列表,则可以使用Arrays.asList将其转换为数组列表。

Arrays.asList(yourArr).contains(someVal)

或者您可以编写自己的contains方法,只需循环遍历每个元素,看它是否在数组中。

boolean hasElmt = false;
for (int val : yourArr) {
   if (val == someVal) {
      hasElmt = true;
      break;
   }
}

答案 5 :(得分:1)

因为它是一个原始数组,所以没有可以使用的方法。您必须使用for循环遍历数组,并检查每个索引的值。

for(int i = 0; i < listA.lenght; i++) {
    if(inputListA == listA[i]) {
        // it's already on the array
    }
}