用户输入加倍存储在数组中。数组大小未知,应该动态增长

时间:2017-02-16 16:38:33

标签: java arrays

所以我有一个作业,我在控制台中从用户那里获取双打,然后将这些双打存储在一个数组中。这些双打实际上是我将在稍后使用的坐标。

该程序应该能够从用户那里获取未知数量的双打。我遇到的问题是允许数组大小动态增长。我们不能使用arrayList或任何java库集合类。以下是我到目前为止的情况:

import java.util.Scanner;
public class testMain{
  public static void main(String[] args){


    Scanner userInput = new Scanner(System.in);
    boolean debug = true;
    //Two array's where i'll store the coordinates 
    double[] coord1 = new double[3];
    double[] coord2 = new double[3];
    //Array for user commands
    String[] commands = { "random", "exit", "help"};


    for(int i = 0; i < coord1.length; i++){
      System.out.println("Enter Coordinates: ");
      double index = userInput.nextDouble();
      //If more doubles needed for array we want to resize array
      if(coord1[i] >= coord1.length){
        for(int j = 0; j < 10; j++){
          coord1[j] = j + 10;
        }
        double newItems[] = new double[20];
        System.arraycopy(coord1, 0, newItems, 0 ,10);
        coord1 = newItems;
      }


      coord1[i] = index;

    }
    if(debug == true){
      printArray(coord1);
    }
  }

  public static void printArray(double arr[]){

    double n = arr.length;

    for (int i = 0; i < n; i++) {
      System.out.print(arr[i] + " ");
    }

  }
}

我似乎无法弄清楚如何识别何时到达coord1的末尾来执行代码以增加大小并继续循环以获得更多的双倍。

稍后当用户完成时,来自控制台的空条目应退出循环并显示该数组。

2 个答案:

答案 0 :(得分:0)

您的问题是您使用indexPaths循环,它只循环遍历数组的每个元素。因此,它永远不会让用户有机会输入比阵列中更多的元素。使用for循环,以便不是为每个元素循环一次,而是循环直到用户进入“退出”。

以下是对您的代码的一些修改:

while

请记住,当需要调整大小时,这会使数组大小加倍。这意味着如果数组大小加倍为6而用户只输入5个值,则数组末尾会有几个空值(零)。如果这是一个问题,你可以修改它。

答案 1 :(得分:0)

您可以使用while循环,直到用户输入命令“exit”。这是在将每个项添加到数组之前动态向数组添加元素的示例。

Enter Coordinates (ex 1,3)
1,5
Enter Coordinates (ex 1,3)
4,7
Enter Coordinates (ex 1,3)
8,9
Enter Coordinates (ex 1,3)
gffd
Error: Invalid Input! Try again
Enter Coordinates (ex 1,3)
3 6
Error: Invalid Input! Try again
Enter Coordinates (ex 1,3)
0,0
Enter Coordinates (ex 1,3)
exit

0 - X: 1.0 Y: 5.0
1 - X: 4.0 Y: 7.0
2 - X: 8.0 Y: 9.0
3 - X: 0.0 Y: 0.0

注意我使用逗号分隔值使用户的生活和生活更轻松,允许他们同时输入坐标。

示例输出

TimeZone timeZone = TimeZone.getDefault();
String zoneId = timeZone.getId();  // "America/Chicago"