Не выводит элементы массива класса при переполнении

class Bag{
    static class objects<T>{
        T num;
        objects(){}
        objects(T n){
            this.num=n;
        }
    }
    ArrayList<objects> mas=new ArrayList<>();
   Bag(){}
    Bag(int n){
        for(int i = 0; i<n;i++){
            mas.add(i,null);
        }
    }
    <T> void add (T num) {
        int count=0;
        boolean flag = false;
        objects<T> obj1 = new objects<>(num);
        while (!flag) {
            int R = (int) Math.round(Math.random() * (mas.size() - 1));
            for (int k = 0; k < mas.size(); k++) {
                if (mas.get(k) == null && R == k) {
                    mas.set(R, obj1);
                    System.out.println("Предмет "+mas.get(k).num+" добавлен в мешок");
                    flag=true;
                    break;
                }
                else count++;
            }
            else if(mas.size()-1==count){
                System.out.println("Мешок полон");
                break;
            }
        }
    }
    objects del(){
        boolean flag = false;
        objects tmp=new objects();
        if(mas.size()==0) return tmp;
        while (!flag) {
            int R = (int) Math.round(Math.random() * (mas.size() - 1));
            for (int k = 0; k < mas.size(); k++) {
                if (mas.get(k) != null && R == k) {
                    tmp=mas.get(k);
                    System.out.println("Предмет "+mas.get(k).num+" удален");
                    mas.remove(k);
                    flag=true;
                    break;
                }
            }
        }
        return tmp;
    }
    final Object retElem(int i){
        return mas.get(i).num;
    }
    final int retSize(){
        return mas.size();
    }
    void show(){
        for(int i=0;i<mas.size();i++){
            if(mas.get(i)!=null) System.out.print(mas.get(i).num  +" ");
            else System.out.print(mas.get(i)+" ");
        }
        System.out.println();
    }
}

public class Main {
    public static void main(String[] args){
       
        com.company.Pair.make_pair(5,"s");
        Bag bag=new Bag(5);
        bag.add(5);
        bag.add(1);
        bag.add(52);
        bag.add(-6);
        bag.add(3);
        System.out.println(bag.retSize());
        System.out.println(bag.retElem(1));
        bag.show();
        bag.del();
        bag.show();
        bag.del();
        bag.show();
        bag.del();
        bag.show();

Сделал мешок,в который элементы добавляются рандомно и удаляются рандомно. Почему-то после добавления лишнего элемента функция show не выводит ничего. Что не так?


Ответы (1 шт):

Автор решения: ulxanxv

Во-первых: зачем вы использовали Generic, если вообще им не пользуетесь? Вернее вы ими пользуйтесь, только максимально бессмысленно

Во-вторых: смысл от вашего класса Objects? Используйте просто Object.

В третьих: как вы вообще запустили Ваш код? Взять хотя-бы вот это:

while (!flag) {
            int R = (int) Math.round(Math.random() * (mas.size() - 1));
            for (int k = 0; k < mas.size(); k++) {
                if (mas.get(k) == null && R == k) {
                    mas.set(R, obj1);
                    System.out.println("Предмет "+mas.get(k).num+" добавлен в мешок");
                    flag=true;
                    break;
                }
                else count++;
            }
            else if(mas.size()-1==count){
                System.out.println("Мешок полон");
                break;
            }
        }

Что за else if? К чему он вообще? Может быть просто if?
Что за com.company.Pair.make_pair(5,"s");?

Ваш метод show() полностью работоспособный, хоть опять же написан максимально коряво. Я позволил себе переписать ваше решение.

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        final Bag bag = new Bag(5);
        bag.add(5);
        bag.add(1);
        bag.add(52);
        bag.add(-6);
        bag.add(3);

        System.out.println(bag.getSize());
        System.out.println(bag.getElement(1));

        bag.show();
        bag.remove();
        bag.show();
        bag.remove();
        bag.show();
        bag.remove();
        bag.show();

    }

    private static class Bag {
        private final List<Object> mas = new ArrayList<>();

        public Bag() {

        }

        public Bag(int n) {
            for (int i = 0; i < n; i++) {
                mas.add(i, null);
            }
        }

        public void add(Object num) {
            int count = 0;
            boolean flag = false;

            while (!flag) {
                int r = (int) Math.round(Math.random() * (mas.size() - 1));
                for (int k = 0; k < mas.size(); k++) {
                    if (mas.get(k) == null && r == k) {
                        mas.set(r, num);
                        System.out.println("Предмет " + mas.get(k) + " добавлен в мешок");
                        flag = true;
                        break;
                    } else count++;
                }

                if (mas.size() - 1 == count) {
                    System.out.println("Мешок полон");
                    break;
                }

            }
        }

        public Object remove() {
            boolean flag = false;
            Object tmp = new Object();
            if (mas.size() == 0) {
                return tmp;
            }

            while (!flag) {
                int R = (int) Math.round(Math.random() * (mas.size() - 1));
                for (int k = 0; k < mas.size(); k++) {
                    if (mas.get(k) != null && R == k) {
                        tmp = mas.get(k);
                        System.out.println("Предмет " + mas.get(k) + " удален");
                        mas.remove(k);
                        flag = true;
                        break;
                    }
                }
            }

            return tmp;
        }

        public Object getElement(int i) {
            return mas.get(i);
        }

        public int getSize() {
            return mas.size();
        }

        public void show() {
            for (Object ma : mas) {
                System.out.print(ma + " ");
            }
            System.out.println();
        }

    }

}
→ Ссылка