2013-06-09 2 views
0

Я создал программу инвентаризации книг. У меня есть два класса: один - это основной класс, а другой - имя класса конструктора Item. В основном классе я создал массив (Item[] book = new Item[100]) для хранения ввода. И в моем Item классе, я хочу, чтобы создать функцию нижеКак создать массив в классе конструктора?

public boolean addItem(Item[] iArray, String itemCode){ 

    boolean c = false; 


    for(int i=0; i<iArray.length; i++){ 
     if(iArray[i].getItemCode().equals(itemCode)){ 
      c = true; 
     } 
     else{ 
      c = false; 

     } 
    } 

    return c; 
} 

как я сделать что Item[] iArray синхронизации с книжным массива в главном классе?


public class Item { 


private String itemCode; 
private String description; 
private int quantity; 
private double costprice; 
private double sellprice; 
private String status = "Available"; 
private boolean check; 
private double discount; 


public Item(){ 
    this("A000","default",0,0.00,0.00,0.25,"Available"); 
} 

//construtor with parameter 
public Item(String itemCode, String description, int quantity, double costprice, double sellprice, double discount, String status){ 
    this.setItemCode(itemCode); 
    this.setDescription(description); 
    this.setQuantity(quantity); 
    this.setCostprice(costprice); 
    this.setSellprice(sellprice); 
    this.setStatus(status); 
    this.setDiscount(discount); 
} 


//setter and getter methods 
public void setItemCode(String itemCode){ 
    this.itemCode = itemCode; 
} 

public String getItemCode(){ 
    return this.itemCode; 
} 

public void setDescription(String description){ 
    this.description = description; 
} 

public String getDescription(){ 
    return this.description; 
} 

public void setQuantity(int quantity){ 
    this.quantity = quantity; 
} 

public int getQuantity(){ 
    return this.quantity; 
} 

public void setCostprice(double costprice){ 
    this.costprice = costprice; 
} 

public double getCostprice(){ 
    return this.costprice; 
} 

public void setSellprice(double sellprice){ 
    this.sellprice = sellprice; 
} 

public double getSellprice(){ 
    return this.sellprice; 
} 

public void setStatus(String status){ 

    this.status = status; 
} 

public String getStatus(){ 
    return this.status; 
} 

public void setDiscount(double discount){ 
    this.discount = discount; 
} 

public double getDiscount(){ 
    return this.discount; 
} 

public void setCheck(boolean check){ 
    this.check = check; 
} 

public boolean getCheck(){ 
    return this.check; 
} 

public boolean addItem(Item[] iArray, String itemCode){ 

    boolean c = false; 


    for(int i=0; i<iArray.length; i++){ 
     if(iArray[i].getItemCode().equals(itemCode)){ 
      c = true; 
     } 
     else{ 
      c = false; 
      numberofobject++; 
     } 
    } 

    return c; 
} 


    public void displaymenu(){ 
    System.out.println("Menu"); 
    System.out.println("1. Add New Item"); 
    System.out.println("2. Search"); 
    System.out.println("3. Edit Details"); 
    System.out.println("4. Edit Quantity"); 
    System.out.println("5. Stop Sell"); 
    System.out.println("6. List"); 
    System.out.println("7. Exit"); 
}*/ 



public String toString(){ 
    String msg = ""; 
    msg = this.getItemCode()+"\t\t\t\t"+this.getDescription()+"\t\t\t\t"+this.getQuantity()+"\t\t\t\t"+this.getCostprice()+"\t\t\t\t"+this.getSellprice()+"\t\t\t\t"+this.getDiscount()+"\t\t\t\t"+this.getStatus(); 
    return msg; 
} 

это мой класс Item.


import java.util.*; 
public class Driver { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int choice,quantity,NOI=0; 
    double cprice,sprice,discount; 
    String itc,name,status = "Available"; 
    boolean check = true; 

    Item[] book = new Item[100]; 



    Scanner s1 = new Scanner(System.in); 
    do{ 
     Item display = new Item(); 


     display.displaymenu(); 
     System.out.print("Please Select Menu: "); 
     choice = s1.nextInt(); 

     if(choice==1){ 

      do{ 


      System.out.print("Please Enter the Item Code: "); 
      itc = s1.next(); 

       //for(int i=0; i<book.length; i++){ 
       //book[i].addItem(book, itc); 

       if(display.addItem(book, itc)==true){ 
        System.out.println("the book item code already exist."+NOI); 
        check = false; 
       } 
       else 
       { 
        check = true; 
       } //This is the question where i faced. 
       //} 

      }while(check==false); 

        System.out.print("Please Enter the Description: "); 
      name = s1.next(); 
      System.out.print("Please Enter the Quantity: "); 
      quantity = s1.nextInt(); 
      System.out.print("Please Enter the Cost Price: "); 
      cprice = s1.nextDouble(); 
      System.out.print("Please Enter the Sell Price: "); 
      sprice = s1.nextDouble(); 
      System.out.print("Please Enter the Discount: "); 
      discount = s1.nextDouble();*/ 

      book[NOI] = new Item(itc,name,quantity,cprice,sprice,discount,status); 
      NOI++; 

     } 

, когда я добавить второй пункт, произошла ошибка (исключение в потоке "основного" java.lang.NullPointerException),

, как ее решить?

+3

Вопрос не очень понятно, попробуйте улучшить его. – Daniel

+0

Метод такой же, как в следующей строке: 'return iArray [iArray.length - 1] .getItemCode(). Equals (itemCode);' Вы возвращаетесь только в том случае, если последний код элемента равен заданному коду элемента. – jlordo

+0

Ваша функция возвращает только последний тестовый пример –

ответ

1

Ваш метод не делает то, что вы хотите, потому что даже если вы найдете код элемента, цикл продолжается. Вы, вероятно, хотите что-то вроде этого: вместо

public boolean addItem(Item[] iArray, String itemCode){ 
    for (Item item : iArray) { 
     if (item.getItemCode().equals(itemCode)) { 
      return true; 
     } 
    } 
    return false; 
} 

Обратите внимание, что метод вы вывесили кажется странным именем, потому что он ничего не добавляет в любом месте.

Вы также можете использовать List<Item> (ArrayList и т. Д.) Вместо Item[].

0

Я не уверен, что я понимаю, что вы ищете, поэтому, если мой ответ не имеет значения, просто прокомментируйте это, и я удалю.

Я предполагаю, что вы пытаетесь хранить информацию: добавьте новый элемент с его кодом в массив. Но я не уверен, если вы:

  • пытается обеспечить уникальность вашего элемента массива перед вставкой:

    может быть, вы можете использовать набор кодов, это упростит ваш проблема, просто проверить с .Contains(), а затем добавить его или нет

  • пытается добавить его в список, и если она уже есть что-то выполнить (приращение количества книги для кода?)

    возможно, вы можете использовать HashMap с кодом как ключ и книгу как item.

В текущем состоянии, ваш метод AddItem не добавляет ничего, просто вернуться, если ваша последняя книга в массиве соответствует код ...

+0

Да, на самом деле этот addItem не для добавления Item. он искал, если существующий код элемента соответствует моему новому коду ввода, он вернет false, поэтому он снова запустится, чтобы вы захотели ввести новый код элемента. но проблема в том, что он не будет возвращаться назад и имеет ошибку, которую я покажу только сейчас. Я не знаю, в чем проблема для него, но он может компилироваться. ошибка возникает, когда я ввожу второй код элемента. –

+0

ОК, тогда вы должны опубликовать трассировку стека и строку, в которой появляется NPE – skoll

Смежные вопросы