2014-10-27 8 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'? – manouti

+0

Он должен найти элемент только один раз, если он найдет его, поэтому я его сломаю. – ax752

+0

вы ломаетесь, если И еще. Таким образом, вы проверяете первый элемент, и это приводит к перерыву, даже если он не равен. удалить разрыв из 'else' –

ответ

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

break вернется из ближайшего цикла. Так что в вашем случае вы перестанете перебор for(String fitem : myarray)continue вместо этого будет немедленно идти один шаг вперед в цикле

+0

Он должен только найти строку один раз, поэтому, как только я ее нашел, я могу ее сломать. – ax752

+0

Итак, вы пытаетесь найти элемент, равный args [0]? – user

+0

Моя команда должна добавлять материал в файл конфигурации, но если он уже существует, отображается сообщение, а затем выходить из него. – ax752

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); 
Смежные вопросы