2014-10-27 47 views
1

我環路只檢查數組,這使我的代碼的第一個項目失敗每次:我環路只檢查第一陣列項目

String igitems = "IgnoredItems"; 
String items = getConfig().getString("IgnoredItems.itemid"); 
items = items + args[0] + ","; 
String[] myarray = items.split(","); 
for(String fitem : myarray) { 
    if(!fitem.equals(args[0])){ 
     getConfig().set(igitems + ".itemid", items); 
     saveConfig(); 
     reloadConfig(); 
     sender.sendMessage(prefix + ChatColor.GREEN + "Added " + ChatColor.GOLD + args[0] + ChatColor.GREEN + " to ignore list."); 
     break; 
    } else { 
     sender.sendMessage(prefix + ChatColor.RED + "Item is already in the list"); 
     break; 
    } 
} 

如果我添加system.out.print(myarray);String[] myarray = items.split(",");它顯示了整個陣列,這是正確的:

1:0 
2:0 
5:0 
8:0 
5:0 

但是,當我添加system.out.print(fitem);for(String fitem : myarray){它顯示了從陣列(1:0)僅第一項至極讓我的代碼,除非它的第一個項目,幾乎每一次失敗。

+2

對'if'和'else'部分中的'break'是否有意義? – manouti 2014-10-27 21:48:11

+0

它應該只發現一次,如果它發現它,這就是爲什麼我打破它。 – ax752 2014-10-27 22:01:29

+0

如果還有其他問題,你正在打破。因此,您正在檢查第一個元素,並導致中斷,即使它不相等。從'else'中刪除中斷 – 2014-10-27 22:07:27

回答

0

我更換了循環與

    if(!items.contains(args[0] + ",")){ 
         getConfig().set(igitems + ".itemid", items + args[0] + ","); 
         saveConfig(); 
         sender.sendMessage(prefix + ChatColor.GREEN + "Added " + ChatColor.GOLD + args[0] + ChatColor.GREEN + " to ignore list."); 
        } else { 
         sender.sendMessage(prefix + ChatColor.RED + "Item (" + ChatColor.GOLD + args[0] + ChatColor.RED + ") is already in the list !"); 
        } 

它工作得很好,解決了。

0

你正在打破循環。我不知道在哪種情況下你想打破循環,但即使fitem.equals(args[0])!fitem.equals(args[0])你正在調用中斷。

也許你只是想打破其他情況?

if(!Arrays.asList(my).contains(args[0])){ 
    getConfig().set(igitems + ".itemid", items); 
    saveConfig(); 
    reloadConfig(); 
    sender.sendMessage(prefix + ChatColor.GREEN + "Added " + ChatColor.GOLD + args[0] + ChatColor.GREEN + " to ignore list."); 
}else{ 
    sender.sendMessage(prefix + ChatColor.RED + "Item is already in the list") 
} 

A break將從最近的迴路返回。所以你的情況你停止通過for(String fitem : myarray)遍歷一個continue反而會立刻去先行一步在循環

+0

它應該只找到一次字符串,所以一旦找到它,我就可以打破它。 – ax752 2014-10-27 21:54:31

+0

所以你試圖找到等於args [0]的元素? – user 2014-10-27 21:57:21

+0

我的命令應該添加東西到一個配置文件,但如果它已經存在,顯示一條消息,然後退出。 – ax752 2014-10-27 22:00:02

0

看看this question及其答案 - 你break語句導致此行爲。你可能想要continue或者什麼也沒有,因爲那會有相同的行爲。

0

您正在添加,之後,而不是之間。

String items = getConfig().getString("IgnoredItems.itemid"); 
// Wrong 
items = items + args[0] + ","; 
// Ok 
if (items.isEmpty()) { 
    items = args[0]; 
} else { 
    items = items + "," + args[0]; 
} 

但是,請檢查您的整個方法。 見MemorySection.getStringList(String)

List<String> items = getConfig().getStringList("IgnoredItems.itemid"); 
items.add(args[0]); 
getConfig().set("IgnoredItems.itemid", items);