如何获取数组中的输出值以进一步处理输出

时间:2017-05-29 15:17:23

标签: java

我正在尝试获取数字因子并找到该数字因子之间的最小距离。我试图通过两个步骤完成这个过程,首先找到因子,然后取这些数字来找到它们之间的最小距离。 我用它来找到数字的阶乘

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);

        }
    }

我的问题是,我不知道如何将这些输出存储在数组中以供进一步计算。

2 个答案:

答案 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));
}

此外,无需对数组进行排序,因为这些因素已经被排序。