如何操作数组?

时间:2017-02-26 08:11:42

标签: java arrays

我有一个有2个点的数组(开头必须有2个点)。我需要获得用户输入并在用户输入超过阵列可容纳的数量时加倍数组。输入-1后,用户输入应该停止。该数组也必须不接受重复。

我不知道如何让不接受重复并在用户进入-1时结束程序,同时每次填满时仍然将数组加倍。

这是我迄今为止所拥有的,但它有缺陷且无法正常运行。

    public class GroupArrays {

public static void main(String[] args)  {

 Scanner input = new Scanner (System.in);
int [] numbers   =  new int[2];
int x;
int n=0;



    for( int i = 0; i<numbers.length; i++){
        System.out.println("Please enter number"); 
        int number =  input.nextInt();

         while ( input.hasNextInt() )
         {
            x = input.nextInt();


            if ( n == numbers.length )
            {

               int[] h;  
               h = new int[ 2*numbers.length ]; 

               for ( int i1 = 0; i1 < numbers.length; i1++ )
               h[i1] = numbers[i1];               

               numbers = h;      

             }
          if(x == -1){
                break;
            }

             numbers[n] = x;  
             n++;        
         }

         for ( int i1 = 0; i1 < numbers.length; i1++ )
                System.out.println( numbers[i1] );
             }
          }

我可以弄清楚如何单独完成所有事情,但是当我必须将它们全部用于1个数组并进行用户输入时,这变得很困难。 PS。我觉得我让它变得比它需要的更复杂。

2 个答案:

答案 0 :(得分:0)

我只是给你提示如何解决问题,以及如何编写更容易理解和维护的代码,甚至(最重要的)你自己。

在方法中拆分代码,执行简单的任务。不要试图将所有内容都写成一段巨大的代码。

算法的伪代码是

loop
    ask and get input number

    if (number is -1) 
        break out of the loop

    else if array already contains number
        print error message

    else 

       if no space left in array
           array = copy of array with doubled length

       store number in next available index in array and increment the next available spot index
end of loop

print the array

现在,您可以看到有些东西可以作为单独的方法轻松实现:

  • 询问并获取输入号码
  • 检查数组是否已包含数字
  • 长度加倍的数组副本
  • 打印数组

首先编写这些简单方法的签名,而不实现它们。然后通过调用这些方法编写算法。

然后逐个实现简单方法并逐个测试。你现在可以通过编写一个用硬编码参数调用它们的main方法来做到这一点,看看它们是否符合你的期望。

每次编写和测试后,测试主算法。如果您犯了错误,请通过重新测试您必须修改的方法进行迭代。

在对所有方法进行编码时,选择明确指出变量代表什么的名称,以及方法的作用,即使它们很长。例如,nextAvailableIndexx更清晰。使用好的名称可以帮助包括你在内的每个人理解代码并发现错误。

此外,在键入时严格缩进代码。您发布的代码未正确缩进,这使得难以理解其结构。坚持4个空格作为缩进级别,并始终在iffor等的主体周围使用花括号。总是将它们放在if / for之后,而不是在下一行。保持一致。

答案 1 :(得分:-1)

public class GroupArrays {

 public static void main(String[] args)  {

 Scanner input = new Scanner (System.in);
 int [] numbers   =  new int[2];
 int x;
 int n=0;



for( int i = 0; i<numbers.length; i++){
    System.out.println("Please enter number"); 
    int number =  input.nextInt();

     while ( input.hasNextInt() )
     {
        x = input.nextInt();


        if ( n == numbers.length )
        {

           int[] h;  
           h = Arrays.copyOf[numbers,2*numbers.length ]; //change     

         }
      if(x == -1){
            break;
        }

         numbers[n] = x;  
         n++;        
     }

     for ( int i1 = 0; i1 < numbers.length; i1++ )
            System.out.println( numbers[i1] );
         }
      }

使用Arrays.copyOf(array_name,array_length);创建长度不同的新数组。