[英]How to create a single array from for loop values
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter number: ");
int a = sc.nextInt();
for ( int i = 1; i < a; i++) {
int []div = {a/i};
if (a%i == 0 ) System.out.print(Arrays.toString(div) + " ");
}
}
输入:68 输出:[68] [34] [17] [4] [2]
问题是如何制作单个数组使其看起来像 [68, 34, 17, 4, 2] ?
由于您无法预先计算div
将具有多少个元素(它需要对a
分解),因此您有多种选择:
div
的大小:int a = 68;
int n = 0; // length of the result
for (int i = 1; i < a; i++) {
if (a % i == 0) {
n++;
}
}
int[] div = new int[n];
n = 0;
for (int i = 1; i < a; i++) {
if (a % i == 0) {
div[n++] = a / i;
}
}
System.out.println(Arrays.toString(div));
int a = 68;
List<Integer> div = new ArrayList<>();
for (int i = 1; i < a; i++) {
if (a % i == 0) {
div.add(a / i);
}
}
System.out.println(div);
int[] divArr = div.stream().mapToInt(Integer::intValue).toArray();
System.out.println(Arrays.toString(divArr));
Stream
: 正如@Eritrean
在评论中建议的那样,您可以使用IntStream
来构建您的数组:
int a = 68;
int[] div = IntStream
.range(1, a)
.filter(i -> a % i == 0)
.map(i -> a / i)
.toArray();
System.out.println(Arrays.toString(div));
它将比第二个变体更有效,因为它避免了创建Integer
包装器。
PS 为简洁起见,我省略了main
方法和Scanner
初始化。 如果需要,您可以将其放回原处,例如:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter number: ");
int a = sc.nextInt();
int n = 0; // length of the result
for (int i = 1; i < a; i++) {
if (a % i == 0) {
n++;
}
}
int[] div = new int[n];
n = 0;
for (int i = 1; i < a; i++) {
if (a % i == 0) {
div[n++] = a / i;
}
}
System.out.println(Arrays.toString(div));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.