如何修改我的程序,使用户不需要指定输入长度?

问题描述 投票:0回答:1

我做了一个程序,要求

数组的长度:

以及数组的元素

然后程序会将元素相乘。

我的问题是,我如何提示用户只输入数组的元素,而不问长度,然后在输入-1时停止?我是否需要使用一个数组列表?这是我目前的代码。

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Length of the array: "); //Prompt User for length
        int number = Integer.parseInt(input.next());

        System.out.print("The elements of your array: "); //Prompt User for elements
        int[] myArray = new int[number];
        for(int i = 0; i < number; i++){
            myArray[i] = Integer.parseInt(input.next());
        }
          System.out.printf("The multiplication is %d.", multiplication(myArray, myArray.length - 1) ); //End Statement     
    }        
    static int multiplication(int[] array, int startIndex) {
        if (startIndex == 0) 
            return(array[startIndex]); 
        else
            return (array[startIndex] * multiplication(array, startIndex - 1));
    }       
}

如果有任何帮助,我将不胜感激。

java recursion java.util.scanner user-input
1个回答
0
投票

首先是代码,然后是解释(出现在代码之后,如下)。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class MultiplyRecurse {
    private static int multiplication(int[] array, int startIndex) {
        if (startIndex == 0) 
            return(array[startIndex]); 
        else
            return (array[startIndex] * multiplication(array, startIndex - 1));
    }

    /**
     * @param args
     */
    public static void main(String[] args) {

        @SuppressWarnings("resource")
        Scanner stdin = new Scanner(System.in);

        String quit = "Q";
        List<Integer> list = new ArrayList<>();
        String line = null;
        while (!quit.equalsIgnoreCase(line)) {
            try {
                System.out.print("Enter a number (or 'Q' to quit): ");
                line = stdin.nextLine();
                if (!line.equalsIgnoreCase(quit)) {
                    list.add(Integer.valueOf(line));
                }
            }
            catch (NumberFormatException xNumberFormat) {
                System.out.println("Not a number. Please try again.");
            }
        }
        int[] myArray = list.stream().mapToInt(i->i).toArray();
        System.out.printf("The multiplication is %d.%n",
                          multiplication(myArray, myArray.length - 1));
    }
}

在java中 int 是一个基元。如果你看一下类的代码 ArrayList 你会发现它包含一个名为 elementData 它是一个 Object. 因此,你不能创建一个 ArrayList 对象,该对象包含一个由 int所以你需要使用 Integer 代替。

请注意,如果用户输入的数字大于或等于 MAX_VALUE编码 Integer.valueOf(line) 会扔 NumberFormatException.

您的 multiplication() 方法需要一个 int[] 参数,所以你需要将你的 ArrayList<Integer>int[]. 实现这一点的代码行来自于这段 一堆溢出 问题:如何在Java中把List转换成int[]?

如何在Java中把List转换成int[]?

编辑

由于上级的 评论

List<Integer> numbers = new ArrayList<>();
System.out.print("Enter numbers: ");
while (input.hasNextInt()) {
    int number = input.nextInt();
    if (number == -1) {
        break;
    }
    numbers.add(Integer.valueOf(number));
}
int[] myArray = numbers.stream().mapToInt(i->i).toArray();
System.out.printf("The multiplication is %d.%n",
                  multiplication(myArray, myArray.length - 1));

样品运行。

Enter numbers: 8 4 -1 <ENTER>
The multiplication is 32.

在输入 -1,点击<ENTER>(在键盘上)。


0
投票

是的,我们也可以使用ArrayList和Array,下面是一个使用ArrayList的例子。

    List<Integer> list = new ArrayList<Integer>();
    Scanner input = new Scanner(System.in);
    System.out.print("The elements of your array: ");
    boolean flag = true;
    while (flag) {
        int val = input.nextInt();
        if (val > 0) {
            list.add(val);
        } else {
            flag = false;
            System.out.println(list);
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.