2014-10-27 45 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);