Пользователь вводит в несколько полей для ввода соответственно некие данные. При нажатии на кнопку программа должна понять, полностью ли соответствуют введённые данные тем, что содержатся в уже имеющемся массиве (r1), или почти полностью (не хватает только одного элемента). Если первое условие выполняется, то программа указывает на это в массиве rezmax в элементе с соответствующем номером; если второе условие выполняется - то в массиве similar. В общем, всё прекрасно работает, но проблема в том, что этих уже имеющихся массивов у меня по идее должно быть штук 600. Не взорвётся ли телефон с такой программой, если для 30 массивов студия уже ругается?
String[] r1={"item1","item2","item3","item4","item5"};
String[] check= {editText1.getText().toString(),editText2.getText().toString(),editText3.getText().toString(),editText4.getText().toString(),editText5.getText().toString()};
String checkst=Arrays.toString(check);
int[] rezmax={0,0,0};
int[] similar={0,0,0};
int i1;int i2;int i3;int i4;
if(Arrays.asList(check).containsAll(Arrays.asList(r1))){rezmax[1]=1;} else {
for( i1 =0; i1 < r1.length; i1++) {if(checkst.contains(r1[i1])) {
for(i2 =0; i2 < r1.length&&i2!=i1; i2++){if(checkst.contains(r1[i2])){
for( i3 =0; i3 < r1.length&&i3!=i2; i3++){if(checkst.contains(r1[i3])){
for(i4 =0; i4 < r1.length&&i4!=i3; i4++){if(checkst.contains(r1[i4])){
similar[1]=1;}}}}}}}}}
ОБНОВЛЕНИЕ
Вот товарищ zRrr хорошую идею подкинул. Если вычесть check из r1, и при этом останется, так сказать, ноль, то можно заявить о том, что rezmax[1]=1;. А если же при этом в r1 останется один элемент, не совпадающий с одним из элементов check, значит similar[1]=1;. Также, zRrr сказал что-то про множества, но совсем не понял, что мне с ними в данном случае делать. Помогите, господа!
ОБНОВЛЕНИЕ ОБНОВЛЕНИЯ
В общем, вот, что я насоображал. Жаль только, не работает. Да и по размеру не меньше предыдущей конструкции. Горе я программист :(
ArrayList<String> list = new ArrayList<>();
int counter = 0;
Arrays.asList(r1).removeAll(Arrays.asList(check)); // здесь я вычитаю один массив из другого, и, кажется, тут что-то не так
for (String s : r1) if (!s.isEmpty()) list.add(s); // здесь я удаляю пустые элементы, которые должны стать пустыми после вычитания
r1=list.toArray(new String[list.size()]);
for (int i = 0; i < r1.length; i++) // здесь я подсчитываю количество оставшихся
{if (r1[i] != null) counter ++;}
if(counter==0){rezmax[1]=1;}else if(counter==1){similar[1]=1;} // а здесь подвожу итоги
Лог ошибки приложить, к сожалению, не могу, потому что силы зла неведомым образом поломали все эмуляторы, а любое андроид устройство компьютер вообще перестал видеть, но это уже совсем другая история :/
OnClick is too complex to analyze by data flow algorithm, это норма? А с логикой у меня всё в порядке? – i am so lame Feb 14 '16 at 14:09HashSet(выкидывйте из множества введенные строки, считайте количество ненайденных, смотрите, сколько осталось). Если строки не уникальны, то нужен Multiset или HashMap<String, Integer>. – zRrr Feb 14 '16 at 15:51if(r1-check==0){rezmax[1]=1;}else if(r1-check==один элемент из r1 не совпал с одним элементом check){similar[1]=1;}. – i am so lame Feb 14 '16 at 18:47