所以我有一个作业,我在控制台中从用户那里获取双打,然后将这些双打存储在一个数组中。这些双打实际上是我将在稍后使用的坐标。
该程序应该能够从用户那里获取未知数量的双打。我遇到的问题是允许数组大小动态增长。我们不能使用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的末尾来执行代码以增加大小并继续循环以获得更多的双倍。
稍后当用户完成时,来自控制台的空条目应退出循环并显示该数组。
答案 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"