Java-код для массивов String, заполняющих ComboBox - PullRequest
0 голосов
/ 13 марта 2012
years = new String[67];
for(int y = cal.get(Calendar.YEAR) - 13; y <= cal.get(Calendar.YEAR) - 80; y++) {
    for(int i = 0; i < years.length; i++){
        years[i] = Integer.toString(y);
    }
}
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(years));

У меня есть этот код для заполнения ComboBox 67 датами, но я получаю только пустые значения?

Ответы [ 6 ]

4 голосов
/ 13 марта 2012

Тело внешнего цикла никогда не будет выполнено, так как условие цикла ложно на первой итерации:

Вы пытаетесь перейти от x - 13 вверх до x - 80.

for(int y = cal.get(Calendar.YEAR) - 13; y <= cal.get(Calendar.YEAR) - 80; y++)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
               this is higher than...    ...this even in the first iteration

Кроме того, чтобы убедиться, что -13 до -80 действительно добавляет к длине массива years, я бы посоветовал вам написать это так:

String[] years = new String[67];
int thisYear = cal.get(Calendar.YEAR);
int startYear = thisYear - 13;

for (int i = 0; i < years.length; i++)
    years[i] = Integer.toString(startYear - i);

jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(years));
1 голос
/ 13 марта 2012

Предполагая, что календарь инициализируется с текущим временем, вы переходите с 1999 на 1932 год. Это делает пустой цикл.

И какой смысл иметь эти два вложенных цикла?

0 голосов
/ 13 марта 2012

Несколько вопросов выскакивают у меня: Во-первых, ваш цикл выполняется ровно 0 раз, начиная с cal.get(Calendar.YEAR) - 13 <= <code>cal.get(Calendar.YEAR) - 80, поэтому цикл немедленно завершается.

Два, так как вы переходите от большего значения (cal.get(Calendar.YEAR) - 13) к меньшему (cal.get(Calendar.YEAR) - 80), вам не следует делать y++, так как это увеличит y, вместо этого вы должны использовать y--.

Наконец, for(int i = 0; i < years.length; i++) заменит ВСЕ значения в годах.

0 голосов
/ 13 марта 2012

Ваше условие завершения цикла for является истинным на первой итерации. Используйте это вместо:

years = new String[67];

         for(int i = 0; i < years.length; i++){

            years[i] = Integer.toString(cal.get(Calendar.YEAR) - 13-i);
         }

jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(years));
0 голосов
/ 13 марта 2012
    for(int y = cal.get(Calendar.YEAR) - 13; y >= cal.get(Calendar.YEAR) - 80; **y--**) {
0 голосов
/ 13 марта 2012
years = new String[67];
int index = 0;

    for(int y = cal.get(Calendar.YEAR) - 13; y >= cal.get(Calendar.YEAR) - 80; y--) {

            years[index++] = Integer.toString(y);
    }

jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(years));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...