Javaを学習していますが、ArrayList
とRandomGenerator
に問題があります。
catalogue
という別のクラスから作成されたオブジェクトの配列リストを持つitem
というオブジェクトがあります。
リスト内のcatalogue
objectsのいずれかに関するすべての情報を返すメソッドitem
が必要です。item
はランダムに選択する必要があります。
import Java.util.ArrayList;
import Java.util.Random;
public class Catalogue
{
private Random randomGenerator;
private ArrayList<Item> catalogue;
public Catalogue ()
{
catalogue = new ArrayList<Item>();
}
public Item anyItem()
{
int index = randomGenerator.nextInt(catalogue.size());
return catalogue.get(index);
System.out.println("Managers choice this week" + anyItem + "our recommendation to you");
}
コンパイルしようとすると、System.out.println
行を指すエラーが表示されます。
「シンボル変数anyItemが見つかりません」
anyItem
はメソッドであり、System.out.println
呼び出しはreturnステートメントの後にあり、到達できないためとにかくコンパイルされません。
次のように書き直したい場合があります。
import Java.util.ArrayList;
import Java.util.Random;
public class Catalogue
{
private Random randomGenerator;
private ArrayList<Item> catalogue;
public Catalogue()
{
catalogue = new ArrayList<Item>();
randomGenerator = new Random();
}
public Item anyItem()
{
int index = randomGenerator.nextInt(catalogue.size());
Item item = catalogue.get(index);
System.out.println("Managers choice this week" + item + "our recommendation to you");
return item;
}
}
public static Item getRandomChestItem(List<Item> items) {
return items.get(new Random().nextInt(items.size()));
}
あなたが戻った後にあなたのプリントが来ます-あなたはその文に到達することはできません。また、anyItemを変数として宣言したことはありません。あなたが望むかもしれません
public Item anyItem()
{
int index = randomGenerator.nextInt(catalogue.size());
Item randomItem = catalogue.get(index);
System.out.println("Managers choice this week" + randomItem.toString() + "our recommendation to you");
return randomItem;
}
ToString部分はただの急ごしらえです-この目的に役立つ文字列を返すメソッド 'getItemDescription'を追加したいかもしれません...
次のように、return
の下からsystem.out.println
メッセージを削除する必要があります。
public Item anyItem()
{
randomGenerator = new Random();
int index = randomGenerator.nextInt(catalogue.size());
Item it = catalogue.get(index);
System.out.println("Managers choice this week" + it + "our recommendation to you");
return it;
}
return
ステートメントは、基本的に関数が終了することを示しています。 return
ステートメントを超えて含まれ、そのスコープ内にあるものはすべて、発生した動作になります
Generics
を使用して、ここに進みます。
private <T> T getRandomItem(List<T> list)
{
Random random = new Random();
int listSize = list.size();
int randomIndex = random.nextInt(listSize);
return list.get(randomIndex);
}
これを試して
public Item anyItem()
{
int index = randomGenerator.nextInt(catalogue.size());
System.out.println("Managers choice this week" + catalogue.get(index) + "our recommendation to you");
return catalogue.get(index);
}
Ivor Horton's Beginning Java 2などの本を入手することを強くお勧めします。
私がコードを見ることができるようにSystem.out.println("Managers choice this week" + anyItem + "our recommendation to you");
に到達できません。
anyItemは変数として宣言されていないため、エラーが発生することは理にかなっています。しかし、さらに重要なことは、returnステートメントの後にコードがあるため、到達不能なコードエラーが発生することです。
System.out.println( "今週のマネージャーの選択" + anyItem + "あなたへのおすすめ");
変数anyItemが初期化されていないか、宣言されていません。
このコード:+ anyItem +
object anyItemのtoStringメソッドの値を取得することを意味します
なぜこれが機能しないのかということ。 returnステートメントの後にSystem.out.printがあります。プログラムが行に到達することはありませんでした。
おそらく次のようなものが必要です:
public Item anyItem() {
int index = randomGenerator.nextInt(catalogue.size());
System.out.println("Managers choice this week" + catalogue.get(index) + "our recommendation to you");
return catalogue.get(index);
}
btw:Javaで、関数の宣言と同じ行に中括弧を配置するという概念。