我在这里遇到了问题:
我被要求创建一个随机抽奖号码的集合。然后应该从低到高对这些数字进行排序,并且不应将重复数据放在控制台上。
它到目前为止工作但是当集合的大小不是== 6时,控制台抛出一个空输出。我给了一个else指令,然后该方法应该再次执行。
希望有人理解并能提供帮助。
谢谢!
import java.util.*;
public class Lotto {
public static Collection<Integer> tippen() {
List<Integer> liste = new ArrayList<Integer>();
while (liste.size() < 6) {
liste.add((int) (Math.random()*49+1));
}
Collections.sort(liste);
LinkedHashSet<Integer> lottotipp = new LinkedHashSet<Integer>(liste);
liste.clear();
liste.addAll(lottotipp);
return lottotipp;
}
public static void main (String[] args) {
Collection<Integer> zahlen = tippen();
if (zahlen.size() == 6) {
System.out.println("Ihr Tipp: " + zahlen);
} else {
tippen();
}
}
}
答案 0 :(得分:1)
正如其他人所说,您的收藏品并不总是包含6个元素,然后再次调用您的方法,但结果永远不会打印出来。
最简单的解决方案是通过将整数直接添加到集合中,使方法始终返回6个元素,直到它有6个元素。这样你就可以扔掉整个布尔的kludge。
另请注意,您已将该组的元素添加到列表中,对列表进行了排序,但随后又返回了该组。
public class Lotto {
public static Collection<Integer> tippen() {
TreeSet<Integer> lottotipp = new TreeSet<>();
Random rand = new Random();
while (lottotipp.size() < 6) {
lottotipp.add(rand.nextInt(50) + 1);
}
return lottotipp;
}
public static void main(String[] args) {
Collection<Integer> zahlen = tippen();
System.out.println("Ihr Tipp: " + zahlen);
}
}
答案 1 :(得分:0)
我给了一条else指令,然后再次执行该方法。
tippen
再次执行,是的;但是tippen
没有任何输出。第二次调用时,您也不会使用main
的结果。
如果您想再次运行整件事,请重新运行tippen
,而不是main
。 (可能将int
中的所有代码放入一个不带任何参数的新函数中。)
另外:如果您想要Random
,我建议您创建nextInt
个实例并使用Math.random
,而不是使用double
来获取double
,将int
相乘,向其中加1,然后将其强制转换为eval
。
答案 2 :(得分:0)
因为你的随机(转换为int)有时会返回相同的值两次(或更多)..
(int) (Math.random()*49+1)
然后,您使用LinkedHashSet删除重复项,因此大小不再是6。
LinkedHashSet<Integer> lottotipp = new LinkedHashSet<Integer>(liste);
你的&#34;否则&#34;通过再次调用该方法来修复它,但它不会打印输出。
如果你多次运行它,它有时会输出输出,有时不会......
答案 3 :(得分:0)
你忘记打印你的tipps();
只需打印出来:
System.out.println(tippen());
答案 4 :(得分:0)
问题是由于如果zahlen
的大小不是6,则调用tippen()
方法,但它没有分配给任何对象。
我添加了一个do{}while();
块,直到zahlen
的大小为6。
public class Lotto {
public static Collection<Integer> tippen() {
List<Integer> liste = new ArrayList<Integer>();
while (liste.size() < 6) {
liste.add((int) (Math.random()*49+1));
}
Collections.sort(liste);
LinkedHashSet<Integer> lottotipp = new LinkedHashSet<Integer>(liste);
liste.clear();
liste.addAll(lottotipp);
return lottotipp;
}
public static void main (String[] args) {
Collection<Integer> zahlen = tippen();
do{
if (zahlen.size() == 6) {
System.out.println("Ihr Tipp: " + zahlen);
} else {
zahlen = (tippen());
}
}while(zahlen.size() != 6);
}
}
如果您希望程序打印数字,即使它们不是6,您也可以这样做:
if (zahlen.size() == 6) {
System.out.println("Ihr Tipp: " + zahlen);
} else {
System.out.println("Ihr tipp: " + tippen());
}
这应该可以解决你的问题。
答案 5 :(得分:0)
非常感谢你,我现在解决了这个问题:
import java.util.*;
public class Lotto {
public static Collection<Integer> tippen() {
List<Integer> liste = new ArrayList<Integer>();
while (liste.size() < 6) {
liste.add((int) (Math.random()*49+1));
}
Collections.sort(liste);
LinkedHashSet<Integer> lottotipp = new LinkedHashSet<Integer>(liste);
liste.clear();
liste.addAll(lottotipp);
return lottotipp;
}
public static void main (String[] args) {
Collection<Integer> zahlen = tippen();
while(zahlen.size() != 6){
zahlen = (tippen());
}
System.out.println("Ihr Tipp: " + zahlen);
}
}