2016-11-02 5 views
-1

コードの一部が繰り返され、名前変数の一部の変更があり、それを使用することができます。しかし、私はこの変数を宣言することでこの問題を抱えています。そのため、メソッドの外側に、次にメソッドの内側に、次にメソッドの外側にそれらを見ることができます。私はJavaにはまったく初心者ですので、静的、空白、その他すべてのものを手助けしてください。 :) コード自己はうまく動作します。ちょうどその部分をコピーするのではなく、意図した通りに書くべきだと思います。Javaは繰り返しコードの一部を置き換えます(メソッドはありますか?)

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"); 
} 
} 

} 

まあ、私はそれが書かれて見たとき、それは(私は方法についていくつかのかなりの基礎が欠けていると思う)私とかなり悪いように見えますが、私はそれが既に書かれていたとき、私はそれを送信してみました、多分誰か私に役立ちます。

+0

あなたにはかなり悪いように見える場合は、インデントを修正することをお勧めします。それはあまりにも私に悪い見えます。 – khelwood

答えて

0

pをあまりにも早く宣言して、すべてのループでそれを再利用する必要はありません。このメソッドのfor-loopには、標準のi変数を使用できます。

は実際にあなたがそれを処理するための2つのposibilitiesがあり、私はあなたの問題を理解したよう

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

それはまた "arraylistの名前"ではなく、 "arraylistへの参照"です。 – Kayaman

0

のようにのために、各ループを使用したほうが良いでしょう。 まず、チェックしたい各リストを反復処理します。

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 
} 

しかし、すでに述べたように、それはより良いので、別の方法に、このような重複したコードを分離します::あなたが持って考えると

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

forループの外のpをインスタンス化する必要はありません

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"); 
     } 
    } 
} 

をそして、あなたはあなたが必要とするこのような方法で呼び出すことができます:Product.java、あなたはこれを試みることができる

checkProductInList(someArrayList, "Keyboard"); // "keyboard" is just a product i typed. It can be anything, as a String. 
関連する問題