18

1 から 100 までの数字を入力して配列に割り当てるようユーザーに求めています。配列のサイズは、ユーザーが数値を入力する回数に依存するため、初期化されません。

配列の長さをどのように割り当てる必要がありますか?

ユーザーが 5 6 7 8 9 (5 つの数字) を入力すると、

int[] list;  

になる

int[] list = new int[5];

ループを使用しようとしていますが、停止しません。

int[] integers;
int j = 0;
do {
       integers = new int[j + 1];
       integers[j] = in.nextInt(); 
       j++;      
} while((integers[j-1] >= 1) ||(integers[j-1]) <= 100);
4

7 に答える 7

29

List配列ではなく、このようなものには a を使用する必要があります。一般的な経験則として、配列に追加する要素の数が事前にわからない場合は、List代わりに a を使用します。ほとんどの人は、おそらくArrayList.

本当に a を使用できない場合はList、おそらく初期サイズ (おそらく 10?) の配列を使用し、追加する要素の数に対する配列の容量を追跡し、要素を a にコピーする必要があります。部屋が足りなくなった場合の新しい、より大きな配列 (これは本質的にArrayList内部で行うことです)。また、現実の世界では、このようにすることは決してないことに注意してください。たとえば、このようなケース専用に作成された標準クラスの 1 つを使用しますArrayList

于 2013-04-03T00:03:57.320 に答える
8

それに基づいてリストまたはクラスを使用する必要があると思います。

例えば、

ArrayList<Integer> integers = new ArrayList<Integer>();
int j;

do{
    integers.add(int.nextInt());
    j++;
}while( (integers.get(j-1) >= 1) || (integers.get(j-1) <= 100) );

使用方法の詳細については、この記事を参照してください。

于 2013-04-03T00:11:01.417 に答える
2

リストのようなデータ構造が最善の方法であることに同意します。

List<Integer> values = new ArrayList<Integer>();
Scanner in = new Scanner(System.in);
int value;
int numValues = 0;
do {
    value = in.nextInt();
    values.add(value);
} while (value >= 1) && (value <= 100);

または、最大サイズの配列を割り当てて値をロードすることもできます。

int maxValues = 100;
int [] values = new int[maxValues];
Scanner in = new Scanner(System.in);
int value;
int numValues = 0;
do {
    value = in.nextInt();
    values[numValues++] = value;
} while (value >= 1) && (value <= 100) && (numValues < maxValues);
于 2013-04-03T00:10:54.907 に答える
1

配列に固執したい場合は、この方法で利用できます。しかし、リストと比較すると良くないので、お勧めしません。しかし、それはあなたの問題を解決します。

import java.util.Scanner;

public class ArrayModify {

    public static void main(String[] args) {
        int[] list;
        String st;
        String[] stNew;
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter Numbers: "); // If user enters 5 6 7 8 9 
        st = scan.nextLine();
        stNew = st.split("\\s+");
        list = new int[stNew.length]; // Sets array size to 5

        for (int i = 0; i < stNew.length; i++){
            list[i] =  Integer.parseInt(stNew[i]);
            System.out.println("You Enterred: " + list[i]);
        }
    }
}
于 2013-04-03T00:14:15.183 に答える