2016-11-02 3 views
-1

Ich habe Code, wo Teil des Codes wiederholt, nur einige Änderungen in den Namen Variablen, und es kann verwendet werden. Aber ich habe dieses Problem mit deklarierenden Variablen, also kann ich sie außerhalb der Methode sehen, dann in der Methode und dann wieder außerhalb der Methode. Ich bin ziemlich neu in Java, also brauche Hilfe mit all dem statischen, void und allem anderen. :) Code selbst funktioniert gut, denke nur, ich sollte beginnen, es so zu schreiben, wie es beabsichtigt war, nicht nur Teile davon kopieren.Java ersetzen Teil des Wiederholungscodes (mit Methoden?)

public class Some Class{ 
    public static void someMethod() throws Exception { 
    ArrayList<Product> someArraylist= new ArrayList<>(); 
    int p; 

/* from this part, the code repeats many times, just the name of the Arraylist is changing 
so if I could make some method, I would just call, and give it the name of the ArrayList 
it would run the code, execute the System.out.println() and code continues */ 
for (p = 0; p < someArraylist.size(); p++) { 
    if (someArraylist.get(p).getName().contains("Name of Product")) 
     System.out.println("it works"); 
} 
... some more code, not repeating... 
} 
/*when I create method here, it doesn't know the variables created before, 
not to mention that it knows the values of them : 
"int p" and "Arraylist someArraylist" */ 

public static void replaceCode(Arraylist nameOfArraylist) { 
for (p = 0; p < nameOfArraylist.size(); p++) { 
    if (nameOfArraylist.get(p).getName().contains("Name of Product")) 
     System.out.println("it works"); 
} 
} 

} 

Nun, als ich es geschrieben zu sehen, die es mit mir ziemlich schlecht aussieht (ich glaube, ich bin ein paar ziemlich Grundlagen über Methoden fehle), aber wenn ich es schon geschrieben habe, habe ich versucht, es zu senden, vielleicht jemand hilft mir.

+0

Wenn es Ihnen ziemlich schlecht aussieht, empfehle ich Ihnen, den Einzug zu korrigieren. Es sieht auch ziemlich schlecht für mich aus. – khelwood

Antwort

0

Sie müssen nicht so früh deklarieren und in jeder Schleife wiederverwenden. Sie können einfach die Standardvariable i für die for-Schleife in der Methode verwenden. mit der foreach-Schleife, wie in

for(Product p : nameOfArraylist) 
    if(p.getName().contains("Name of Product")) 
     System.out.println("It works."); 
+0

Es ist auch nicht der "Name der Arraylist", es ist ein "Verweis auf eine Arraylist". – Kayaman

0

In der Tat würden Sie besser dran, als ich Ihr Problem verstehen sind zwei posibilities es zu handhaben. Zuerst iterieren Sie über jede Liste, die Sie überprüfen möchten. Es besteht keine Notwendigkeit p außerhalb der for-Schleifen zu instanziieren:

public static void someMethod() throws Exception { 
    List<Product> list1 = ... 
    for(int i = 0; i < list1.size(), i++){ 
     if (list1.get(i).getName().contains("Name of Product")){ 
      System.out.println("it works"); 
     } 
    } 
    List<Product> list2 = ... 
    for(int i = 0; i < list2.size(), i++){ 
     if (list2.get(i).getName().contains("Name of Product")){ 
      System.out.println("it works"); 
     } 
    } 
    //...repeat and repeat and repeat 
} 

Aber, wie Sie bereits erwähnt, wäre es besser, so dass solche duplizierten Code auf ein anderes Verfahren trennen:

public static void someMethod() throws Exception { 
    List<Product> list1 = ... 
    List<Product> list2 = ... 
    List<Product> list3 = ... 
    List<Product> list4 = ... 
    iterate(list1); 
    iterate(list2); 
    iterate(list3); 
    iterate(list4);  
} 

public static void iterate(List<Product> list){ 
    for(int i = 0; i < list.size(), i++){ 
     if (list.get(i).getName().contains("Name of Product")){ 
      System.out.println("it works"); 
     } 
    } 
} 
0

Betrachtet man ein Product.java, könnten Sie dies versuchen:

void checkProductInList(List someArrayList, String productName) { 
    // I recommend forEach, it's more user friendly. 
    for (Product p : someArraylist) { 
     if (p.getName().contains(productName)) { 
      System.out.println("it works"); 
     } 
    } 
} 

Und dann können Sie die Methode wie folgt aufrufen, wo Sie brauchen:

checkProductInList(someArrayList, "Keyboard"); // "keyboard" is just a product i typed. It can be anything, as a String. 
Verwandte Themen