Повторяется результат вывода в массиве

проблема заключается в том что при выводе элементов массива выводится и повторяется значения одного элемента ,думаю что алгоритмическая ошибка может быть допущена либо в конструкторе класса Cart или в методе ShowInfo():

  Main.java:
    package com.company;
    public class Main {
        public static void main(String[] args) {
            Cart cart =new Cart(10);
            Item item=new Item("macintosh",1500);
            Item item2=new Item("HP",2500);
            Item item3=new Item("Dell",3500);
            Item item4=new Item("Samsung",4500);
            Item item5=new Item("Sony",5500);
            cart.addItem(item);
            cart.addItem(item2);
            cart.addItem(item3);
            cart.addItem(item4);
            cart.addItem(item5);
            cart.showInfo();
            System.out.println();
         
        }
    }
    
    Item.java:
    
    package com.company;
    public class Item {
        private  static String name;
        private static float price;
    
        public Item(String name,float price){
            Item.name =name;
            Item.price =price;
        }
    
        public Item() {
    
        }
    
        public static float getPrice(){
            return price;
        }
    
        public static String getName(){
            return name;
        }
       }
    
    Cart.java:
    
    package com.company;
    public class Cart {
        private static Item[] stack;
        private static int topIndex;
    
        public Cart(int capacity){
            stack = new Item[capacity];
            topIndex=-1;
        }
        public static void addItem(Item item){
            push(item);
        }
        public static void push(Item item){
            topIndex++;
            stack[topIndex]=item;
    
        }
        public void showInfo(){
            for(Item item:stack)
            System.out.println("Item has name: "+item.getName()+" and costs: "+item.getPrice());
        }
    }
Заранее спасибо.

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

Автор решения: Aziz Umarov

Дело в том что вы итерируете весь список когда нужно итерировать только добавленные т. е. те которые определены, ещё в добавок статические поля которые одни на все объекты. Каждый переопределяет значение у всех

Main.java:
    package com.company;
    public class Main {
        public static void main(String[] args) {
            Cart cart =new Cart(10);
            Item item=new Item("macintosh",1500);
            Item item2=new Item("HP",2500);
            Item item3=new Item("Dell",3500);
            Item item4=new Item("Samsung",4500);
            Item item5=new Item("Sony",5500);
            cart.addItem(item);
            cart.addItem(item2);
            cart.addItem(item3);
            cart.addItem(item4);
            cart.addItem(item5);
            cart.showInfo();
            System.out.println();
         
        }
    }
    
    Item.java:
    
    package com.company;
    public class Item {
        private String name;
        private float price;
    
        public Item(String name,float price){
            this.name = name;
            this.price = price;
        }
    
        public Item() {
    
        }
    
        public float getPrice(){
            return this.price;
        }
    
        public String getName(){
            return this.name;
        }
       }
    
    Cart.java:
    
    package com.company;
    public class Cart {
        private static Item[] stack;
        private static int topIndex;
    
        public Cart(int capacity){
            this.stack = new Item[capacity];
            this.topIndex=-1;
        }
        public void addItem(Item item){
            push(item);
        }
        public void push(Item item){
            this.topIndex++;
            this.stack[topIndex]=item;
    
        }
        public void showInfo(){
            for(int index = 0; index <= this.topIndex; index++)
            System.out.println("Item has name: "+ this.stack[index].getName()+" and costs: "+ this.stack[index].getPrice());
        }
    }

так попробуйте

→ Ссылка