Pro*_*224 1 java arrays for-loop
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) + " ");
}
}
Run Code Online (Sandbox Code Playgroud)
输入:68 输出:[68] [34] [17] [4] [2]
问题是如何制作单个数组,使其看起来像 [68, 34, 17, 4, 2] ?
由于您无法div提前知道有多少个元素(它需要对 进行因式分解a),因此您有多种选择:
div1.作为单独的步骤计算 的大小: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));
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以随后将集合转换为原始数组:
int[] divArr = div.stream().mapToInt(Integer::intValue).toArray();
System.out.println(Arrays.toString(divArr));
Run Code Online (Sandbox Code Playgroud)
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));
Run Code Online (Sandbox Code Playgroud)
它比第二个变体更有效,因为它避免了创建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));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
301 次 |
| 最近记录: |