我要求用户输入1到100之间的一些数字并将它们分配到一个数组中。数组大小未初始化,因为它取决于用户输入数字的次数。 我应该如何分配数组长度? 如果用户输入5 6 7 8 9(5个数字),则
int[] list;
成为
int[] list = new int[5];
我正在尝试使用循环,但它不会停止。
int[] integers;
int j = 0;
do {
integers = new int[j + 1];
integers[j] = in.nextInt();
j++;
} while((integers[j-1] >= 1) ||(integers[j-1]) <= 100);
答案 0 :(得分:22)
你应该使用List
这样的东西,而不是数组。作为一般经验法则,当您不知道要在手数中添加多少元素时,请使用List
代替。大多数人可能会使用ArrayList
来解决这个问题。
如果你真的不能使用List
,那么你可能不得不使用一些初始大小的数组(可能是10?)并跟踪你的数组容量与你有多少元素如果你的空间不足,则添加并将元素复制到一个新的更大的数组(这基本上是ArrayList
在内部执行的操作)。另请注意,在现实世界中,您将从不这样做 - 您将使用专门为此类案例制作的标准类之一,例如ArrayList
。< / p>
答案 1 :(得分:5)
我认为你需要使用基于它的List或类。
例如,
ArrayList<Integer> integers = new ArrayList<Integer>();
int j;
do{
integers.add(int.nextInt());
j++;
}while( (integers.get(j-1) >= 1) || (integers.get(j-1) <= 100) );
您可以阅读this article以获取有关如何使用该信息的更多信息。
答案 2 :(得分:1)
我同意像List这样的数据结构是最好的方法:
List<Integer> values = new ArrayList<Integer>();
Scanner in = new Scanner(System.in);
int value;
int numValues = 0;
do {
value = in.nextInt();
values.add(value);
} while (value >= 1) && (value <= 100);
或者您可以只分配一个最大大小的数组并将值加载到其中:
int maxValues = 100;
int [] values = new int[maxValues];
Scanner in = new Scanner(System.in);
int value;
int numValues = 0;
do {
value = in.nextInt();
values[numValues++] = value;
} while (value >= 1) && (value <= 100) && (numValues < maxValues);
答案 3 :(得分:1)
String line=sc.nextLine();
int counter=1;
for(int i=0;i<line.length();i++) {
if(line.charAt(i)==' ') {
counter++;
}
}
long[] numbers=new long[counter];
counter=0;
for(int i=0;i<line.length();i++){
int j=i;
while(true) {
if(j>=line.length() || line.charAt(j)==' ') {
break;
}
j++;
}
numbers[counter]=Integer.parseInt(line.substring(i,j));
i=j;
counter++;
}
for(int i=0;i<counter;i++) {
System.out.println(numbers[i]);
}
我总是在这种情况下使用此代码。在旁边,您可以识别两个或三个或更多数字。
答案 4 :(得分:0)
如果你想坚持一个阵列,那么你可以这样使用。但与List相比并不好,不推荐。但它会解决你的问题。
import java.util.Scanner;
public class ArrayModify {
public static void main(String[] args) {
int[] list;
String st;
String[] stNew;
Scanner scan = new Scanner(System.in);
System.out.println("Enter Numbers: "); // If user enters 5 6 7 8 9
st = scan.nextLine();
stNew = st.split("\\s+");
list = new int[stNew.length]; // Sets array size to 5
for (int i = 0; i < stNew.length; i++){
list[i] = Integer.parseInt(stNew[i]);
System.out.println("You Enterred: " + list[i]);
}
}
}
答案 5 :(得分:0)
int i,largest = 0;
Scanner scan = new Scanner(System.in);
System.out.println("Enter the number of numbers in the list");
i = scan.nextInt();
int arr[] = new int[i];
System.out.println("Enter the list of numbers:");
for(int j=0;j<i;j++){
arr[j] = scan.nextInt();
}
以上代码效果很好。我已经输入了列表中元素的数量并相应地初始化了数组。
答案 6 :(得分:0)
**从单行输入数组编号列表。
String input = sc.nextLine();
String arr[] = input.split(" ");
int new_arr[] = new int[arr.length];
for(int i=0; i<arr.length; i++)
{
new_arr[i] = Integer.parseInt(arr[i]);
}