如何从用户那里获取单个数组输入?

时间:2018-01-26 15:06:10

标签: java arrays

在下面的代码中,我标记了不起作用的行。 有人可以解释一下为什么这不起作用吗?

   import java.util.Scanner;

    public class ArrayLength {

        public static void main(String[] args) {

            Scanner myScanner = new Scanner(System.in);

            System.out.println("Please enter the array : ");

            double[] userArray = myScanner.nextDouble();//This line doesn't work        
        }
    }

enter image description here

4 个答案:

答案 0 :(得分:0)

您必须在int中定义数组索引,然后才能获得double输入

public class Example {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        //Decide array length
        System.out.print("Please enter the array : ");
        int num = Integer.parseInt(scan.nextLine());

        //Create a double array to store  values
        double userArray[] = new double[num];
        for (int i = 0; i < userArray.length; i++) {
            System.out.print("Enter value " + (i + 1) + " : ");
            userArray[i] = scan.nextDouble(); // you can store input with double datatype now
        }

        //Now display one by one
        for (int i = 0; i < userArray.length; i++) {
            System.out.print("Value are " + (i + 1) + " : ");
            System.out.print(userArray[i] + "\n");
        }
    }
}

如果您不希望将输入作为数组

 double num= myScanner.nextDouble();

答案 1 :(得分:0)

我猜你试图从行分隔的输入中设置一个双数组。如果是这样,你可以使用这样的东西:

Scanner myScanner = new Scanner(System.in);
System.out.println("Please enter the array : ");

String strScan = myScanner.nextLine();
String[] aScan = strScan.split(" ");

double[] userArray = new double[aScan.length];

int i = 0 ;
for (String str : aScan) {
    userArray[i] = Double.parseDouble(str);
    i++;            
}

答案 2 :(得分:0)

如果您希望用户输入只位于一行,并且您确定所有值(由空格分隔)都可以解析为Double我建议使用以下语句:

double[] userArray = Arrays.stream(myScanner.nextLine().split(" "))
        .mapToDouble(Double::parseDouble)
        .toArray();

将整个下一行作为字符串读取,用空格分割,然后将每个值解析为double。

如果您只需要读取一个double值并且需要将它存储到一个数组中,那么您可以像这样简单地使用Array Initializer:

double[] userArray = {myScanner.nextDouble()};

这样userArray总共有1个元素,它是第一个,唯一的值就是用户输入。

答案 3 :(得分:0)

myScanner.nextDouble()将输出一个double而不是double数组。因此,您需要将该double设置为等于数组中的特定索引,而不是尝试将整个数组设置为等于单个double。如果你想在阵列中接受多个双打,我建议使用for循环。

例如:

for(int x = 0; x < userArray.length; x++)
{
   userArray[x] = myScanner.nextDouble(); // x in this scenario is a specific position in the array
}

此外,如果用户输入格式化为每个双倍之间的空格(即1.0 2.0 3.0 4.0等)myScanner.nextDouble();将取第一个双倍,然后再次通过for循环并取下一个双倍等。这很有用,因为用户输入都可以在一行上,所以用户可以一次输入整个数组。