Ojbects の 2 つの配列をトラバースすると思われるメソッドがあります。最初はサイズ 50 のメニューで、Recipes を含みます。これには、食材と呼ばれる最大 10 の要素を保持し、それぞれ最大 3 つの要素を保持しますが、私はそれらを探しているだけです。名前!Recipes 内のこれらの Ingredient 要素の一致する名前を取得し、それらを String 配列に追加してから返したいと思います。これが私のコードです...
public class Recipe implements Cloneable
{
String Name;
final int INGREDIENT_ARRAY_MAX = 10;
Ingredient Ingredients[] = new Ingredient[INGREDIENT_ARRAY_MAX];
public class RecipeBook
{
final static int MENU_ARRAY_MAX = 50;
static Recipe Menu[] = new Recipe[MENU_ARRAY_MAX];
public static String[] getRecipesByIngredient(String ingredientName)
{
String[] targetRecipes = new String[MENU_ARRAY_MAX];
int counter = 0;
for (int j = 0; j < Menu.length; j++)
{
if (Menu[j] == null)
{
break;
}
else
{
for (int k = 0; k < Menu[j].Ingredients.length; k++)
{
System.out.println(Menu[j].Ingredients[k]);
if (Menu[j].Ingredients[k].getName().equals(ingredientName))
{
targetRecipes[counter] = Menu[j].getName();
counter++;
}
}
}
}
return targetRecipes;
}
}
}
今、私はそれが機能しないこととその理由を知っていますが、解決策はわかりません。現時点では、各レシピに 3 つのレシピと 3 つの材料しかありません! 一番上のものは参考用です。これらは RecipeBook (Menu) と Recipes (Ingredients) のオブジェクト配列です。
このコードを実行すると、文字列に対してnullをテストしようとするため、NullPointerExceptionが発生しますが、レシピをチェックするにはどうすればよいですか。何も見つからない場合は、メニューの次のレシピに移動します。単に追加しますが、終了するまでチェックを続けます。nullではなくnullをチェックする「if」ステートメントを追加しようとしましたが、複雑になり、プログラムが残りの配列のチェックに戻ることはありません。最初の「if」が残っている可能性があることはわかっています。メニューでチェックしたスポットが null の場合、残りの部分は null でなければならないため、それ以上進む意味がないからです。しかし、どうすれば Ingredients 配列をチェックし、何かを見つけ、追加し、その食材を使ったレシピのメニューをふるいにかけますか? 内側のループ内に if を追加して null をチェックし、そうであれば外側のループに戻ることはできますか?