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

除了if (results=false)Brian Agnew 已经提到的,我还看到了这个:

  array[j]=array2[count];

您用未初始化的第二个数组的值覆盖数组中的值,在该数组中存储您的输入。你可能打算做

  array2[count] = array[j];

这里。

于 2013-02-26T11:40:33.773 回答
0

有两个错误:

  1. if 块中的break;语句不应该存在:这会使您脱离循环,但您需要循环继续迭代数组,直到所有元素都被复制。
  2. 测试false 分配给结果,而不是对其进行比较,因此更改为if (!result)

还有一些风格问题:

  1. 您的搜索方法太长了;你不需要found变量
  2. 使用在方法中有意义的参数命名您的参数:array2当没有arrayarray1在范围内时,您有。相同的count2
  3. i更喜欢indexfor 循环变量 - 输入更少,阅读更少

这更像是它应该的样子:

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;

}

在你的主要方法中,为什么你有一个循环 withi和下一个 with j?使它们都成为i-循环变量仅在循环内具有范围,因此没有冲突。

于 2013-02-26T11:27:44.470 回答