我正在尝试获取数字因子并找到该数字因子之间的最小距离。我试图通过两个步骤完成这个过程,首先找到因子,然后取这些数字来找到它们之间的最小距离。 我用它来找到数字的阶乘
param123PreStopAction
我怎样才能再次获得这些输出以找到它们之间的最小距离 我试过这个逻辑
Scanner input = new Scanner(System.in);
int n;
System.out.println("Enter a number");
n = input.nextInt();
if(n <= 0){
System.out.println("cant input a number less than or equal to zero");
input.close();
return;
}
System.out.println("factors of " + "" + n+ "" + " are" );
for(int i = 1; i <= n; i++){
if(n % i == 0){
System.out.println(i);
}
}
我的问题是,我不知道如何将这些输出存储在数组中以供进一步计算。
答案 0 :(得分:1)
您应该创建一个List
(可调整大小的数组)并将因子添加到其中。然后,您可以在列表中应用逻辑。
看看:
List<Integer> factors = new ArrayList<>(); // create an empty ArrayList
for(int i = 1; i <= n; i++){
if(n % i == 0){
System.out.println(i);
factors.add(i); // add i to it.
}
}
// we can hopefully assume that n have at least two factors (if n > 1, that is)
// no need to sort, insertion order is kept
int minDiff = factors.get(1) - factors.get(0);
for (int i = 2 ; i < factors.size() ; i++) {
minDiff = Math.min(minDiff, factors.get(i)-factors.get(i-1));
}
System.out.println(minDiff);
答案 1 :(得分:1)
首先,您需要ArrayList
来存储n
的因子。你可以做点什么
List<Integer> factors = new ArrayList<>();
for(int i = 1; i <= n; i++){
if(n % i == 0){
factors.add(i);
}
}
现在,为了找到最小差异,您可以循环ArrayList
,例如
int minDiff = factors.get(1)-factors.get(0);
for (int i = 2 ; i < factors.size(); i++) {
minDiff = Math.min(minDiff,factors.get(i)-factors.get(i-1));
}
此外,无需对数组进行排序,因为这些因素已经被排序。