Java数组填充了最后一个插槽中的内容
所以我用这个for循环来填充一个小数组,从一个大数组中随机抽取5个元素,但我有一个问题,当我用这个新对象填充原始数组时,它会用刚刚放入的对象填充它上面的每个插槽。所以我的小数组中的所有内容都是一样的Java数组填充了最后一个插槽中的内容,java,arrays,for-loop,Java,Arrays,For Loop,所以我用这个for循环来填充一个小数组,从一个大数组中随机抽取5个元素,但我有一个问题,当我用这个新对象填充原始数组时,它会用刚刚放入的对象填充它上面的每个插槽。所以我的小数组中的所有内容都是一样的 `public Prize[] Showcase(){ Scanner fileIn=null; try{ fileIn = new Scanner(new File("prizeList.txt")); fo
`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());
}
}`
如果我正确理解了你的问题,你是在问如何从另一个列表中获取随机项列表。我假设您特别不想要重复项(即短列表不应包含长列表中的多个项目)。如果这是正确的,那么我建议如下:
List<Prize> getRandomPrizes(List<Prize> prizes, int prizeCount) {
Collections.shuffle(prizes);
return prizes.stream().limit(prizeCount).collect(Collectors.toList());
}
List GetRandomPrices(列出奖品,整数奖品计数){
收藏。洗牌(奖品);
返回奖品.stream().limit(prizeCount).collect(Collectors.toList());
}
它可以自动处理原始列表中的奖品少于
prizeCount
的情况。当您制作某个静态的时,只有一个。因此,您的实例是共享相同数据的唯一引用。你需要像这样的东西
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;
}
}
公共班级奖{
private String name;//不知道您的问题,但对于(int i=0;fileIn.hasNextLine();i++)而言,这看起来不太正确…{
如何确保i
的增量不会超过prizeList
数组的大小?另外-每次通过循环时,您都在创建一个新的随机
对象-您希望在循环外创建一个对象。这可能与您的问题有关…您让我到了那里。我只知道我要创建的文件的行号扫描。谢谢你,我会改变它。显然我有点新,所以我通常会胡乱处理,直到某些东西工作起来,然后在出现问题时进行修复。谢谢伙计们!我在需要提交之前就已经解决了。我很讨厌静态调用东西,但我想我终于解决了。这是一个很好的教训。@gengkev。还有当你消除了不可能,剩下的,无论多么不可能,都是事实…我不能在这个程序中使用数组列表。否则它会让事情变得非常简单。你现在明白了吗?我现在明白了。它基本上只是使它总体上是一样的,所以当我改变它时,它必须改变这是一个类级别的全局函数;每个类一个(不是每个实例一个)。当你改变“it”时,它是唯一的一个。
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;
}
}