2012-03-12 2 views
0
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 датами, но все, что я получаю, является пустым значением?Код Java для String массивов, населяющих ComboBox

ответ

4

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

Вы пытаетесь перейти от 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)); 
+0

Хм .. я вижу спасибо. – Dan

+0

Добро пожаловать. – aioobe

0
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)); 
0
for(int y = cal.get(Calendar.YEAR) - 13; y >= cal.get(Calendar.YEAR) - 80; **y--**) { 
+0

Вам нужно сравнить с помощью '> =' :-) – aioobe

+0

исправлено ... спасибо – redDevil

0

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

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)); 
1

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

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

+0

отличный ум думает одинаково +1 – mKorbel

0

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

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

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

Смежные вопросы