Почему нет, если операторы работают с моим логическим списком? - PullRequest
0 голосов
/ 18 ноября 2011

То, что я пытаюсь сделать здесь, - это всегда получать случайное значение от моего строкового массива и для этого я использую другой массив, содержащий то же количество логических значений, что и строки.

Когда мне нужна случайная строка, я делаю это:

randomstring = r.nextInt(100);
String mystring = c.getAnswear(randomstring);

if(c.getAnswear(randomstring) == null){
    randomstring = r.nextInt(100);
    mystring = c.getAnswear(randomstring);
    System.out.println("Random again!!!!!!!!!!!!!!!");
}

А вот как это выглядит внутри c.getAnswear

List<String> strings = new ArrayList<String>();
strings.add("blablabla");
//And another 100 of theese
//Then we have theese boolean array
ArrayList<Boolean> trueornot = new ArrayList<Boolean>();
trueornot.add(false);
//Another 100 of them
//Then we have this
String Answear = null;
if(trueornot.get(indexNum).equals(true)){
   Answear = null;
   System.out.println(Answear);
   System.out.println("Already used string random again!");
}
else if(trueornot.get(indexNum).equals(false)){
    trueornot.add(indexNum, true);
    Answear = strings.get(indexNum);
    System.out.println(Answear);
    System.out.println("Something in the array was set to true");
}
return Answear;

Но когда я пытаюсь это сделать, я могу рандомизировать мою строку, сколько мне нужно, и она выводит на консоль, что-то установлено в true, но я вижу, что много раз одна и та же строка снова используется, и System.out.println("Already used string random again!"); никогда не печатается в консоли.

То же самое, когда я вызываю этот getAnswear, у меня есть оператор if (c.getAnswear(randomstring) == null) строка внутри System.out.println("random again!!!!!!!"); никогда не попадает в консоль.

Как мне заставить это работать? Похоже, строка ответа внутри getAnswear никогда не равна нулю, и это странно, потому что я устанавливаю логическое значение true.

Ответы [ 2 ]

3 голосов
/ 18 ноября 2011

trueornot.add(indexNum, true)
это добавляет значение в список и сдвигает предыдущее значение по этому индексу вниз по списку.

вы должны использовать trueornot.set(...), который заменяет значение ...

update:

И вот как это выглядит внутри c.getAnswear

List<String> strings = new ArrayList<String>();

strings.add("blablabla");

//And another 100 of theese
//Then we have theese boolean array

ArrayList<Boolean> trueornot = new ArrayList<Boolean>();

trueornot.add(false);

//Another 100 of them
//Then we have this

если это происходит на самом деле каждый раз, когда вызывается getAnswer, то вы каждый раз воссоздаете строки и логический список, все предыдущие изменения теряются.
strings и trueornot должны быть полями классаа не локальные переменные.

2 голосов
/ 18 ноября 2011

это может быть, вы хотите установить значение true вместо того, чтобы вставить его?

вы делаете это:

trueornot.add(indexNum, true);

, но чтобы установить значение, вы должны сделать это:

trueornot.set(indexNum, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...