2015-07-11 189 views
1

我有兩個類:添加的ArrayList到另一個的ArrayList

產品

01; Desinfectante 
02; Aerosol 
03; Limpia Vidrio 
04; Desengrasante 
05; Mata mosquitos 
06; Mata cucarachas 
07; Aceite en aerosol 

說明

01;1;Elevar la masa hasta llegar a tal punto;0;10 
01;1;Mezclar este material con anterior;1;15 
01;2;Relevar;2;5 
01;3;Llevar;00;0 
02;1;Descripcion;7;2 
02;2;Descripcion;6;2 
02;2;Descripcion;00;0 
03;1;Descripcion;1;1 
03;1;Descripcion;2;9 
03;2;Descripcion;00;0 
03;3;Descripcion;5;2 
03;4;Descripcion;6;2 
03;4;Descripcion;3;10 
04;1;Descripcion;00;0 
04;2;Descripcion;1;2 
04;3;Descripcion;1;0 
04;3;Descripcion;2;2 
04;3;Descripcion;3;2 
04;4;Descripcion;7;1 
04;4;Descripcion;6;2 
05;1;Descripcion;7;20 
05;1;Descripcion;6;9 
05;2;Descripcion;00;0 
05;3;Descripcion;1;2 
05;3;Descripcion;2;10 
06;1;Descripcion;2;12 
06;1;Descripcion;4;1 
06;1;Descripcion;6;8 
06;2;Descripcion;5;4 
06;2;Descripcion;7;2 
07;1;Descripcion;1;12 
07;1;Descripcion;2;2 
07;2;Descripcion;3;19 
07;2;Descripcion;4;4 
07;2;Descripcion;00;2 
07;2;Descripcion;5;12 

事情是這樣的:我必須插入指令ArrayList到產品中。它們之間的鏈接是第一個數字,即產品的代碼。

我想兩件事情,第一個:

public static ArrayList<Productos> InsertInstInProd(ArrayList<Instrucciones> instructions, ArrayList<Productos> products) 
{ 
    for (int i = 0; i < products.size()-1; i++) 
    { 
     int n = 0; 
     for (int j = 0; j < instructions.size()-1; j++) 
     { 
      int first = products.get(i).getNumero(); 
      int second = instructions.get(j).getCodProd(); 

      if (first == second) 
      { 
       products.get(i).getInstr().get(n).setCodIns(instructions.get(j).getCodIns()); 
       products.get(i).getInstr().get(n).setCodProd(instructions.get(j).getCodProd()); 
       products.get(i).getInstr().get(n).setDescr(instructions.get(j).getDescr()); 
       products.get(i).getInstr().get(n).setMat(instructions.get(j).getMat()); 
       products.get(i).getInstr().get(n).setMatNec(instructions.get(j).getMatNec()); 

       n++; 
      } 
     } 
     n = 0; 
    } 

第二個:

public static ArrayList<Productos> InsertInstInProd(ArrayList<Instrucciones> instructions, ArrayList<Productos> products) 
{ 
    for (int i = 0; i < products.size()-1; i++) 
    { 
     int n = 0; 
     for (int j = 0; j < instructions.size()-1; j++) 
     { 
      int first = products.get(i).getNumero(); 
      int second = instructions.get(j).getCodProd(); 

      if (first == second) 
      { 
       products.get(i).setInstr(instructions); 
       n++; 
      } 
     } 
     n = 0; 
    } 

    return products; 
} 
+0

SO?你有什麼問題? – Karthik

+0

在第一種情況下,我得到這個: 線程「主」java.lang.IndexOutOfBoundsException異常:索引:0,大小:0 在第二個它不起作用,它不驗證代碼該產品,所以它沒用。我不知道我做錯了什麼。 – madf1990

+0

你可以在問題中發佈完整的錯誤嗎? – Karthik

回答

1

你得到NullPointerException異常,因爲

 products.get(i).getInstr().get(n).setCodIns(instructions.get(j).getCodIns()); 

你沒有檢查是否名單products.get(i).getInstr()有或沒​​有元素。當列表爲empty,並且當您以products.get(i).getInstr().get(0)的身份訪問它時,它會拋出NullPointerException,因爲它試圖獲取空列表的第一個元素。所以在你做這個操作之前,確保products.get(i).getInstr()不是空的。

如果它們是同一類型的,你可以直接添加整個數組列表:

products.get(i).getInstr().addAll(instructions); // again make sure that is not empty. 

如果你只是想replac,使用:

products.get(i).setInstr(instructions.get(j)); 
+0

好的,我如何將整個ArrayList(指令)添加到products.get(i).getInstr()? – madf1990

+0

是的,我試過了,但事情是所有的ArrayList都去那裏了,我只想要那一行。 products.get(i).setInstr(instructions).get(j); – madf1990

0

產品類別

 


    package productsandinstructions; 

    import java.util.List; 

    public class Product { 
     private int productId; 
     private String productName; 
     private List instructions; 

     public int getProductId() { 
      return productId; 
     } 

     public void setProductId(int productId) { 
      this.productId = productId; 
     } 

     public String getProductName() { 
      return productName; 
     } 

     public void setProductName(String productName) { 
      this.productName = productName; 
     } 

     public List getInstructions() { 
      return instructions; 
     } 

     public void setInstructions(List instructions) { 
      this.instructions = instructions; 
     } 
    } 

 

指令類

 


    package productsandinstructions; 

    public class Instruction { 
     private int productId; 
     private int instructionId; 
     private String instDesc; 
     private int mat; 
     private int matNec; 
     private boolean done; 

     public int getProductId() { 
      return productId; 
     } 

     public void setProductId(int productId) { 
      this.productId = productId; 
     } 

     public int getInstructionId() { 
      return instructionId; 
     } 

     public void setInstructionId(int instructionId) { 
      this.instructionId = instructionId; 
     } 

     public String getInstDesc() { 
      return instDesc; 
     } 

     public void setInstDesc(String instDesc) { 
      this.instDesc = instDesc; 
     } 

     public int getMat() { 
      return mat; 
     } 

     public void setMat(int mat) { 
      this.mat = mat; 
     } 

     public int getMatNec() { 
      return matNec; 
     } 

     public void setMatNec(int matNec) { 
      this.matNec = matNec; 
     } 

     public boolean isDone() { 
      return done; 
     } 

     public void setDone(boolean done) { 
      this.done = done; 
     } 
    } 

 

主類

 


    package productsandinstructions; 

    import java.util.List; 

    public class ProductsAndInstructionsMain { 

     private List products; 
     private List instructions; 

     public List getProducts() { 
      return products; 
     } 

     public void setProducts(List products) { 
      this.products = products; 
     } 

     public List getInstructions() { 
      return instructions; 
     } 

     public void setInstructions(List instructions) { 
      this.instructions = instructions; 
     } 

     public static void main(String[] args) { 
      ProductsAndInstructionsMain main = new ProductsAndInstructionsMain(); 
      main.mergeProductsAndInstructions(); 
     } 

     public void mergeProductsAndInstructions() { 
      for (Product product : products) { 
       for (Instruction instruction : instructions) { 
        if ((!(instruction.isDone())) && (instruction.getProductId() == product.getProductId())) { 
         product.getInstructions().add(instruction); 
         instruction.setDone(true); 
        } 
       } 
      } 
     } 
    } 

 
相關問題