简单的阵列复制问题

时间:2013-02-26 09:18:09

标签: java arrays

我必须创建一个包含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; 


   }

 }

3 个答案:

答案 0 :(得分:4)

不看其余的逻辑,这个

 if(results=false);

看起来不正确

  1. 这是一个错字吗?您需要if (results == false),或更简洁,if (!results)
  2. 注意尾随分号,这意味着无论if子句的计算结果如何,都将执行以下块。 ;正在创建一个空块,它非常有效。

答案 1 :(得分:0)

有两个错误:

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

  3. 也存在一些风格问题:

    1. 你的搜索方法很长;您不需要found变量
    2. 使用方法中的含义命名参数:当范围内没有array2array时,您有array1count2
    3. 也是如此
    4. 首选iindex以获取循环变量 - 只需输入更少内容即可阅读
    5. 这更像它应该是什么样的:

      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;
      

      }

      在您的主要方法中,为什么有i的循环和j的循环?同时使它们i - 循环变量只在循环中具有范围,因此没有冲突。

答案 2 :(得分:0)

除了Brian Agnew已经提到的if (results=false)之外,我看到了:

  array[j]=array2[count];

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

  array2[count] = array[j];

这里。