私は私のJavaクラスに繰り返し構造を持っており、次のようにデータを提示したかった:印刷繰り返しループ
Peter Black
John Red
構造が右であれば私がままにした場合ので、私は、知りませんあなたのカラーループはINSであることを
Peter-Red
John-Red
私は私のJavaクラスに繰り返し構造を持っており、次のようにデータを提示したかった:印刷繰り返しループ
Peter Black
John Red
構造が右であれば私がままにした場合ので、私は、知りませんあなたのカラーループはINSであることを
Peter-Red
John-Red
あなたが達成しようとしていない、ネストされたforループを使用する代わりに、両方のアレイを同時にループします。両方の配列のサイズが異なるので、i < names.length && i < colors.length
は必ずi
は、二つの配列の長さのいずれかを超えることはありませんようになります場合、私はちょうどi < names.length
を行う、しかし壊れる可能性があり
if (names.length != colors.length) {
// error! not a 1:1 relationship
return;
}
for (int i = 0; i < names.length && i < colors.length; i++) {
String name = names[i], color = colors[i];
Person d = new Person();
d.setName(name);
d.setColor(color);
persons.add(d);
}
。
編集: ここで本当の問題はあなたの情報をどのように格納しているかと思います。 Personオブジェクトを含むコレクションではなく、2つの文字列配列を使用しているのはなぜですか?
Show!Fantastic !!! – AmandaRJ
お知らせ:色のみを表示し、データが
public class Test {
public static void main(String[] args) {
List<Person> persons = new ArrayList<>();
String[] names= {"Peter", "John"};
String[] colors= {"Black", "Red"};
for (String name: names) {
Person d = new Person();
d.setName(name);
for (String color: colors) {
d.setColor(color);
}
persons.add(d);
}
for (Person a : persons) {
System.out.println(a.getName() + "-" + a.getColor());
}
}
}
コンソール上書きされますあなたの名前ループIDE。だから、あなたはそれを設定しているそれぞれの名前の最初の色と2番目の色にして、次の名前に移動しています。
あなたの最大の問題は、おそらく高度なforループを使用していることにあります。インデックスにはなりません。あなたが起動した場合:
for(int i=0;i<names.length;i++)
ソリューションは、おそらく明らかで(とあなたのコードを簡素化)します
(私はより多くを与えるだろうが、それはあなたがそう、私はみますと学ぶことをしようとしている何かのように見えますあなたのコメントを再
)スポイラーを避けるために - あなたは単にあなたが、部分的なオブジェクトを作成Math.maxを使用して対処したい場合
for(int i=0;i<Math.min(names.length, colors.length);i++)
を使用し、唯一の完全に満たされたオブジェクトを作成する場合いずれかの配列の長さがiより小さい場合のケース。すべてのビジネスロジックコード...あなたが何をしたいのかを定義し、それを行う。その後、あなたは上記の「Math.max」ソリューションを使用した場合のアレイは、等しくないケースを扱うようにしたい場合は
、追加:どのように不正なデータを処理するために、(元の問題の一部ではありません)
ループの内側は次のようになります。
if(names.length < i)
d.setName(names[i])
if(colors.length < i)
d.setColor(colors[i])
このように例外はなく、値を安全に設定しています。
しかし、オブジェクトを無効にすると、異なる数の色と名前をユーザーから許可しない方がよい場合があります。彼が3つの名前を入力した場合は、空の色を捨てて、3色になるまで再プロンプトを表示してから、プロンプトを停止します。このような問題をできるだけ早く捕らえるのが常に安全です。
もう一つの良い解決策、で始まる:
if(names.length != colors.length)
throw new IllegalArgumentException("createUsers method must have the same number of names as colors but was called with "+names.length+" names and "+colors.length+" colors")
をお使いのパラメータが正しいの確保と、彼らはあなたのコードLOTを簡素化し、一般的に非常に良い方法ですされていない場合は例外をスローします。
名前ループ内の色配列のループを停止します。
public class Test {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
List<Person> persons = new ArrayList<>();
String[] names= {"Peter", "John"};
String[] colors= {"Black", "Red"};
for (int i=0; i<names.length; i++) {
Person d = new Person();
d.setName(names[i]);
d.setColor(colors[i]);
persons.add(d);
}
for (Person a : persons) {
System.out.println(a.getName() + "-" + a.getColor());
}
}
}
これは中断し、ArrayIndexOutOfをスローします2つの配列のサイズが異なる場合はBoundsExceptionが発生します – MCMastery
これは当てはまります。しかし、彼らはそうではありません。それらの初心者は、同じインデックスを共有する異なる配列で分けられた人物の特徴を考慮するチャレンジを実践するように見えます。 –
あなたはどのように色に名前をマッピングしている
enum Entity {
Peter("Black"),
John("Red");
private final String color;
Entity(String color) {
this.color = color;
}
のような列挙型を使用することができます。伝統的なインデックスベースのループを使用すると、各配列から同じ名前と色を得るのを助ける必要がありますか?どんなパターンがありますか?またはそれは1対1のマッピングですか? –
@DeendayalGargは1:1 – AmandaRJ
@AmandaRJ申し訳ありませんが、私は理解できませんが、なぜ単に人物リストに追加するのではなく、2つの文字列配列を使用していますか? – MCMastery