Java - 为什么在控制台上空输出?

时间:2016-06-12 13:36:00

标签: java if-statement methods collections console

我在这里遇到了问题:

我被要求创建一个随机抽奖号码的集合。然后应该从低到高对这些数字进行排序,并且不应将重复数据放在控制台上。

它到目前为止工作但是当集合的大小不是== 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();
        }
    }
}

6 个答案:

答案 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);
    }   
}