2017-02-26 65 views
-2

我有一个有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。我觉得我已经让这个过程变得比需要的复杂。

回答

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 

现在,你可以看到,有事情可以实现方便地作为单独的方法:

  • 要求并获得输入数字
  • 检查数组是否已经包含数字
  • 数组的副本长度加倍
  • 打印阵列

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

然后逐个实现简单的方法,逐个测试。现在,您可以通过编写一个主要方法,用硬编码的参数调用它们,然后看看它们是否按照您期望的那样去做。

一旦他们每一个都被编写和测试,测试主算法。如果您犯了错误,请重新测试您必须修改的方法。

编写所有方法时,请选择清楚说明变量所代表的名称,以及这些方法做什么,即使它们很长。例如,nextAvailableIndexx要清晰得多。使用好名字可以帮助包括你在内的所有人了解代码并发现错误。

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

+0

感谢您的帮助。我应该先在纸上开始psudocoding。我有一个问题,因为我打字,通常我错了。 –

+0

这就是为什么将它分成小而简单的部分是非常重要的。这些更容易理解,实施和测试。如果你搞砸了,他们更容易修改。一旦你有好的简单构建块,组装它们变得更容易。 –

-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);来创建具有不同长度的新阵列。