2017-05-29 5 views
0

私は数値の因数を求め、その数の因数の間の最小距離を見つけようとしています。私はまず2つのステップでこのプロセスを達成しようとしていましたが、最初に要因を見つけて、それらの数値を取ってそれらの間の最小距離を見つけました。 私は数私は出力をさらに処理するために出力値を配列で取得する方法

int[] a = new int[] {i}; 
    Arrays.sort(a); 
    int minDiff = a[1]-a[0]; 
    for (int i = 2 ; i != a.length ; i++) { 
     minDiff = Math.min(minDiff, a[i]-a[i-1]); 
    } 
    System.out.println(minDiff); 

私の問題があり、このロジックを試みたそれら の間の最短距離を見つけるために再びそれらの出力を得ることができる方法

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

あなたは「*私は数の階乗を得ようとしています」と言いますが、あなたは要素を意味しました、そうですか? –

+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

まず、あなたはnの要因を格納するArrayListを必要としています。あなたは、今

List<Integer> factors = new ArrayList<>(); 
for(int i = 1; i <= n; i++){ 
    if(n % i == 0){ 
     factors.add(i); 
    } 
} 

の行に何かができる最小の違いを見つけるための、あなたは

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

ようArrayList以上のループは、また、配列をソートする必要はありませんが、以来、要因は既に分類されています。

+0

これは魅力のように機能します:) –

+0

関数のシグネチャint minDistance(int n)でこれを取得する方法は? –

+0

@SusHill関数は何かを返しますか?もしそうなら、このコードをすべてこのコードに入れて、最後に 'return minDiff'を実行します。 –

関連する問題