所以我使用这个for循环从一个更大的数组中用5个随机的东西填充一个小数组但我有一个问题,当我用这个新对象填充原始数组时,它填充它上面的每个插槽刚刚放入的对象。所以我的小数组中的所有内容都是一样的。
`public Prize[] Showcase(){
Scanner fileIn=null;
try{
fileIn = new Scanner(new File("prizeList.txt"));
for(int i=0;fileIn.hasNextLine();i++){
String delim ="\t";
String[] splitStrings=fileIn.nextLine().split(delim);
if(splitStrings.length==2){
int thing = Integer.parseInt(splitStrings[1]);
prizeList[i]=new Prize(splitStrings[0],thing);
}
}
}
catch(Exception e){
System.out.println(e);
}
return prizeList;
}
public static void Prizes(Prize[] prizeList){
for(int i=0;i<5;i++){
Random bkRandy=new Random();
int randy = bkRandy.nextInt(50);
prizes[i]=prizeList[i];
System.out.println(prizes[i].getName());
}
}`
我不知道发生了什么,我从未见过它做过这样的事情。我没有得到任何错误或任何东西,我怀疑这个循环有问题。
我的问题是&#34;为什么用最后一个对象填充每个插槽?&#34;
public class Prize {
private static String name;
private static int price;
public Prize( String name, int price){
this.name = name;
this.price = price;
}
public static int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public static String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
答案 0 :(得分:2)
当你制作static
时,只有一个。因此,您的实例是共享相同数据的唯一引用。你需要像
public class Prize {
private String name; // <-- not static.
private int price; // <-- not static.
public Prize(String name, int price){
this.name = name;
this.price = price;
}
public int getPrice() { // <-- not static.
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getName() { // <-- not static.
return name;
}
public void setName(String name) {
this.name = name;
}
}
使用Prize
代码,您只能获得“last”值,因为每个实例都共享了类级字段(static
)。
答案 1 :(得分:0)
如果我正确理解您的问题,您就会问如何从其他列表中获取随机项列表。我假设你特别不想要重复(即短名单不应包含更长列表中的多个项目)。如果这是正确的,那么我建议如下:
List<Prize> getRandomPrizes(List<Prize> prizes, int prizeCount) {
Collections.shuffle(prizes);
return prizes.stream().limit(prizeCount).collect(Collectors.toList());
}
自动处理原始列表中奖励少于prizeCount
的情况。