Не выводит элементы массива класса при переполнении
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();
}
}
}