[英]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;
}
}
這是我引用的第一個代碼,實際上該程序也無法正常運行。 有沒有人可以幫助我解決問題? 謝謝。
您的代碼中存在幾個問題:
構造函數沒有返回類型 ,因此只需刪除void
的public 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;
}
Java是區分大小寫的語言 ,因此您需要在構造函數和類名之間使用完全相同的名稱(包括大小寫),因此在這里,如果您的構造函數是public Item(String item_name,String barcode,double price)
您的類名應為Item
不是item
。 您將需要在代碼中的所有位置修復類名,否則它將無法正常工作。
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.