0

これは通常の方法ですが、for、do-while、および while ループを使用せずに再帰的に実行する必要があります。if ステートメントのみ。

import java.util.ArrayList;
import java.util.Scanner;

public class arrayex1 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        ArrayList<Integer> numbers = new ArrayList<Integer>();

        System.out.println("Enter numbers: ");

        for (int i = 0; i < 10; i++) {
            int num = input.nextInt();
            numbers.add(num);
        }

        for (int i = 0; i < numbers.size(); i++) {
            if (numbers.get(findMin(numbers)) == i) { // If the 'smallest' index value is equal to i.
                System.out.println(numbers.get(i) + " <== Smallest number");
            } else {
                System.out.println(numbers.get(i));
            }
        }
    }

    public static int findMin(ArrayList<Integer> n) {

        int min = 0; // Get value at index position 0 as the current smallest.

        for (int i = 0; i < n.size(); i++) {
            if (n.get(i) < min) {
                min = i;
            }
        } 

        return min;
    }
}
4

3 に答える 3

2

コーディングする方法の 1 つ:

findMin は int を返し、ArrayList<Integer>整数、int min、int index を取り、(integers, Integer.MAX_VALUE, 0) で呼び出す必要があります。

findMin は、integers[index] の値が min より小さいかどうかを確認する必要があります。小さい場合は、min を更新します。

次に、整数の最後のインデックスにない場合は、(integers, min, ++index) で自分自身を呼び出した値を返します。

そうであれば、min を返します。

于 2013-03-18T02:53:26.050 に答える
1

どうぞ ...

public static void main(String[] args) throws Exception {

    final List<Integer> numbers = new ArrayList<Integer>() {
        {
            add(3);
            add(4);
            add(6);
            add(1);
            add(9);
        }

    };

    final int min = findSmallest(numbers.iterator(), Integer.MAX_VALUE);
    System.out.println("Smallest: " + min);
}

private static int findSmallest(Iterator<Integer> iterator, Integer max) {

    int min = Math.min(iterator.next(), max);
    if (iterator.hasNext()) {
        min = findSmallest(iterator, min);
    }

    return min;
}
于 2013-03-18T03:00:55.963 に答える
0

あなたはこのようなことをすることができます。

int min = 2876529394; // Holds the smallest element. Put a number that you know won't 
                      // be in the ArrayList just to make the code simpler. If you don't
                      // have such a number, just implement a counter variable.

findMin( numbers, 0 );
public void findMin( ArrayList<Integer> a, int index ) {

    if( index < a.size() ) {

        if( a.get( index ) < min )
             min = a.get( index );

       findMin( a, ++index );

   }
}            

ここでは、基本的にforループが原則として実行するのとまったく同じことを実行していますが、代わりに再帰を使用しています。

于 2013-03-18T03:04:21.683 に答える