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] ?
uj5u.com熱心網友回復:
由于您無法div提前知道 有多少個元素(它需要對 進行因式分解a),因此您有多種選擇:
1.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));
2. 使用可變增長集合代替陣列:
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));
3. 單線使用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));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/357323.html
