2015-05-19 65 views
0

我很難得到正確的輸出,因爲我不知道如何布爾正確的工作方法。我有一個ArrayList,我爲您在ArrayList中任何重複這裏是我的代碼如何在一個方法中包含一個布爾值JAVA

public void rentOneInstrument(List<Instrument> instrumentList){ 
     String a=""; 
     String b=""; 
     boolean found = false; 
     for (int j = 0; j < instrumentList.size(); j++) { 
       a =""; 
       a = instrumentList.get(j).getName(); 

       for (int i = j+1; i < instrumentList.size(); i++) { 
        b = instrumentList.get(i).getName(); 
        System.out.println("a" + a + " b" + b); 
        if(a.equals(b)){ 
         found = true; 
        }else { 
         found = false; 
        } 
       } 
     } 
     if (found) { 
      System.out.println("duplicate"); 
     }else{ 
      System.out.println("no duplicate"); 
     } 
    } 

這裏是我的輸出

a Cymbals b Drums,.. 
a Cymbals b Cello,.. 
a Cymbals b Cymbals,.. 
a Drums b Cello,.. 
a Drums b Cymbals,.. 
a Cello b Cymbals 

沒有重複//輸出沒有重複時,有明顯的重複輸出。我怎樣才能糾正這一點?

編輯..順便說一句我只是想,打印是否找到了循環內重複或不

+0

見[防止重複在數組列表條目(http://stackoverflow.com/questions/14192532/how-to-prevent-the-adding-of-duplicate-objects-to-an- arraylist):考慮使用'set' – fantaghirocco

回答

2
if(a.equals(b)){ 
    found = true 
}else { 
    found = false; 
} 

這是你的問題。這樣,只有循環的最後一次迭代將被存儲在found中。由於您將其初始化爲false,因此您無需在此再次將其設置爲該值。

for (int i = j+1; i < instrumentList.size(); i++) { 
     b = instrumentList.get(i).getName(); 
     System.out.println("temp1 " + a + " temp2 " + b); 
     if(a.equals(b)){ 
     found = true; 
     } 
    } 

或者,你可以使用一個break語句時,你已經找到了一個匹配走出循環,像這樣:

if(a.equals(b)){ 
    found = true; 
    break; 
}else { 
    found = false; 
} 

這樣,found將是真實的,沒有其他的迭代會而是在循環結束後繼續執行。

1

考慮下面的輸入單出認沽:

a,b,c,a,d 

現在白衣代碼它會因爲d不重複,所以是假的。它會超過一個重複的價值。同樣,一旦一個元素喜歡它被重新植入,你不需要經歷所有元素的整個循環,因此有一個休息。

public void rentOneInstrument(List<Instrument> instrumentList){ 
     String a=""; 
     String b=""; 
     boolean found = false; 
     for (int j = 0; j < instrumentList.size(); j++) { 
       a =""; 
       a = instrumentList.get(j).getName(); 
       if(found) { break; } // Changed line here 
       for (int i = j+1; i < instrumentList.size(); i++) { 
        b = instrumentList.get(i).getName(); 
        System.out.println("temp1 " + a + " temp2 " + b); 
        if(a.equals(b)){ 
         found = true; 
         break; // Changed line here 
        } 
       } 
     } 
     if (found) { 
      System.out.println("duplicate"); 
     }else{ 
      System.out.println("no duplicate"); 
     } 
    } 

做不休息會

public void rentOneInstrument(List<Instrument> instrumentList){ 
     String a=""; 
     String b=""; 
     boolean found = false; 
     for (int j = 0; j < instrumentList.size() && !found; j++) { 
       a =""; 
       a = instrumentList.get(j).getName(); 

       for (int i = j+1; i < instrumentList.size() && !found; i++) { // Changed for condition to look at the found variable too. 
        b = instrumentList.get(i).getName(); 
        System.out.println("temp1 " + a + " temp2 " + b); 
        if(a.equals(b)){ 
         found = true; 
        } 
       } 
     } 
     if (found) { 
      System.out.println("duplicate"); 
     }else{ 
      System.out.println("no duplicate"); 
     } 
    } 

一個這樣做將是使用集,不包含重複的更好的方法的另一種方式。

public void rentOneInstrument(List<Instrument> instrumentList){ 
    Set<Instrument> instrumentSet = new HashSet<Instrument>(instrumentList); 
    if(instrumentList.size()== instrumentSet.size()) { 
      System.out.println("no duplicate"); 
    } else { 
      System.out.println("duplicate"); 
    } 
} 
+0

你真的認爲只是在沒有任何解釋的情況下發布代碼是錯誤的將有助於理解發生了什麼? – GhostCat

+0

嗨。如果我將它插入for循環如果打印後每輸出。我想要做的是打印一個單一的輸出,如果在整個列表中有重複 – Onedaynerd

+0

@Onedaynerd請檢查代碼並瞭解已更改的內容。它不應該改變你每次打印。 – StackFlowed

1

默認情況下,foundfalse。如果發現任何重複,只需設置它true

if(a.equals(b)){ 
     found = true; 
}else { 
     // found = false; 
     // don't do this otherwise it will override previous `found` value 
} 
0
public void rentOneInstrument(List<Instrument> instrumentList){ 

    boolean found=false; 
    List<String> listString=new ArrayList<String>(); 

    for (Instrument inst: instrumentList){ 
     if(listString.contains(inst.getName())){ 

      found=true; 
     } 
     else{ 
      listString.add(inst.getName()); 
     } 


    } 

    if (found) { 
      System.out.println("duplicate"); 
     }else{ 
      System.out.println("no duplicate"); 
     } 


} 
相關問題