簡體   English   中英

無法實例化Java中的類型

[英]Cannot instantiate the type in java

我正在嘗試運行以下代碼:

public class inventory {
    private static item[] inventory;
    static java.util.Scanner scanner = new java.util.Scanner(System.in);          
    private static int noOfItems;       

    public static void main(String[] args) {
        noOfItems=0;        

        // TODO Auto-generated method stub
        inventory=new item[10];
        run();      
    }

    public static int displayMenu()
    {
        System.out.println("1.Add Item");
        System.out.println("2.Find Item");
        System.out.println("3.Delete Item");
        System.out.println("4.Count Item");
        System.out.println("5.Exit");
        System.out.println("Please enter your choice:");
        int i=scanner.nextInt();
        return i;   
    }

    public static void run()
    {
        while(true)
        {
            int i=displayMenu();
            switch(i)
            {
            case 1:addItem();
                    break;
            case 2:findItem();
                    break;
            case 4:countItem();
                    break;
            case 5:return;
            default:System.out.println("Invalid choice");
            }
        }
    }

    public static <Item> void addItem()
    {
        System.out.print("Enter Item namme:");
        String item_name=scanner.next();
        System.out.print("Enter barcode:");
        String barcode=scanner.next();
        System.out.print("Enter price:");
        double price=scanner.nextDouble();
        Item b=new Item(item_name,barcode,price);
        if(noOfItems==inventory.length)
            System.out.println("Array is full");
        else
        {
            inventory[noOfItems++]=b;
            System.out.println("Item added successfully");
        }
    }   

    public static void findItem()
    {
        System.out.print("Enter item name:");
        String item_name=scanner.next();
        for(int i=0; i<noOfItems; i++)
        {
            if(item_name.equalsIgnoreCase(inventory[i].getItem_name()))
            {
                System.out.println("Item found:");
                System.out.print(inventory[i]);
                return;
            }                           
        }       

    }

    public static void countItems()
    {
        System.out.println("Num of items:"+noOfItems);
        for(int i=0; i< noOfItems; i++)
            System.out.println(inventory[i]);
    }
}

然后,我在“ Item b = new Item(item_name,barcode,price);”中得到錯誤。 關於"Cannot instantiate the type in java"

public class item {
    private String item_name;
    private String barcode;
    private double price;

    //To initialise the state of the object
    public void Item(String item_name,String barcode,double price)
    {
        this.item_name=item_name;
        this.barcode=barcode;
        this.price=price;
    }

    //Reader methods i.e behavior methods
    public String getItem_name()
    {
        return item_name;
    }

    public String getBarcode()
    {
        return barcode;
    }

    public double getPrice()
    {
        return price;
    }

    //Writer methods or setter methods
    public void setTitle(String item_name)
    {
        this.item_name=item_name;
    }

    public void setPrice(double price)
    {
        if(price < 0)
                    System.out.println("Price cannot be negative");
        else
            this.price=price;
    }

    public void setBarcode(String barcode)
    {
        this.barcode=barcode;
    }
    public String toString()
    {
        return "Item name:"+item_name+",Barcode:"+barcode+",Price:"+price;
    }
}

這是我引用的第一個代碼,實際上該程序也無法正常運行。 有沒有人可以幫助我解決問題? 謝謝。

您的代碼中存在幾個問題:

1.構造函數的返回類型

構造函數沒有返回類型 ,因此只需刪除voidpublic void Item(String item_name,String barcode,double price)否則它不會被視為構造函數,但作為一個正常的方法。

public Item(String item_name,String barcode,double price)
{
    this.item_name=item_name;
    this.barcode=barcode;
    this.price=price;
}

2.班級名稱

Java是區分大小寫的語言 ,因此您需要在構造函數和類名之間使用完全相同的名稱(包括大小寫),因此在這里,如果您的構造函數是public Item(String item_name,String barcode,double price)您的類名應為Item不是item 您將需要在代碼中的所有位置修復類名,否則它將無法正常工作。

3. addItem的有界類型

您需要從addItem()的方法聲明中刪除<Item> ,否則編譯器將對有限類型的Item感到困惑,從而使其無法編譯。

因此應該是:

public static void addItem()

您已經為構造函數指定了返回類型。 刪除它。

更改

public void Item(String item_name,String barcode,double price)
{
    this.item_name=item_name;
    this.barcode=barcode;
    this.price=price;
}

public Item(String item_name,String barcode,double price)
{
    this.item_name=item_name;
    this.barcode=barcode;
    this.price=price;
}

構造函數不應具有返回類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM