我做了一个程序,要求
数组的长度:
以及数组的元素
然后程序会将元素相乘。
我的问题是,我如何提示用户只输入数组的元素,而不问长度,然后在输入-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));
}
}
如果有任何帮助,我将不胜感激。
首先是代码,然后是解释(出现在代码之后,如下)。
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[]?
由于上级的 评论
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>(在键盘上)。
是的,我们也可以使用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);
}
}