10以内加减法 不重复 采用集合只能显示出来10个 超过无法显示

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

public class RandomEx {
    public static void main(String[] args) {
        RandomEx randomEx = new RandomEx();
        randomEx.test();
    }
    public void test(){
        Random random = new Random();
        List<Integer> s1 = new ArrayList<Integer>();
        List<Integer> s2 = new ArrayList<Integer>();
        List<String> label = new ArrayList<String>();
        //调整为10以内的 结果就可以出来,如果超过10 结果就出不来 不知道什么原因 请大神赐教
        while (s1.size()<10){
            int a = (int) (Math.random()*10+1);
            int b =  (int) (Math.random()*10+1);
            int c =random.nextInt(2);
            String d=(c==1)?"+":"-";
            //如果相减小于0 则重新生成随机数
            if ("-".equals(d)){
                if (a<b){
                    b=random.nextInt(a);
                }
            }
            //如果相加大于10 则重新生成随机数
            if ("+".equals(d)){
                while (a+b>10){
                    a=(int) (Math.random()*10+1);
                    b=(int) (Math.random()*10+1);
                }

            }
            //判断是否添加重复
            if (!s1.contains(a)){
                s1.add(a);
                s2.add(b);
                label.add(d);
            }

        }
        //打印结果
        show(s1,s2,label);

    }

    public void show(List<Integer> s1, List<Integer> s2, List<String> label){
        for (int i =0;i<s1.size();i++){
            int a=s1.get(i);
            int b=s2.get(i);
            String flag = label.get(i);
            int c=("+".equals(flag))?a+b:a-b;
            System.out.print(a+flag+b+"="+c+"\t");
            if ((i+1)%5==0){
                System.out.println();
            }
        }
    }
}
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

img


这个判断不就10个。