проблема с циклом для: Java - PullRequest
       17

проблема с циклом для: Java

1 голос
/ 24 февраля 2011

Я пытаюсь изменить этот код на цикл for, но у меня есть некоторые проблемы

panel[1].setBackground(Color.red);
            panel[2].setBackground(Color.white);
            panel[3].setBackground(Color.red);
            panel[4].setBackground(Color.white);
            panel[5].setBackground(Color.red);
            panel[6].setBackground(Color.white);
            panel[7].setBackground(Color.red);
            panel[8].setBackground(Color.white);
            panel[9].setBackground(Color.red);
            panel[10].setBackground(Color.white);

новый код - для

for (int i = 0; i < panel.length; i++) {
                panel[(i*2)+1].setBackground(Color.red);//i think that is correct, or no?
                panel[(i*3)+1].setBackground(Color.white); //problem here
            }

спасибо

Ответы [ 5 ]

8 голосов
/ 24 февраля 2011

Использовать новый стиль для цикла:

int ct = 0;
for(JPanel panel : panels){
   panel.setBackground((ct % 2 == 1) ? Color.Red : Color.White);
   ct++;
}
3 голосов
/ 24 февраля 2011

Я бы:

Color current = Color.white; 
for( Panel p : panels ) { 
   p.setBackground( current );
   current =  ( current == Color.white ? Color.red : Color.white );
}
3 голосов
/ 24 февраля 2011

Решение

for (int i = 1; i < panel.length; i++)
{
    if ( i % 2 == 0 ) { panel[i].setBackground(Color.white); }
    else { panel[i].setBackground(Color.red); }   
}

Или более краткое выражение, использующее троичный оператор:

for (int i = 1; i < panel.length; i++)
{
     panel[i].setBackground( i % 2 == 0 ? Color.white : Color.red );  
}

Explaination

% является оператором по модулю, i % 2 == 0, когда i четное, != 0, если нечетное.

Предостережения

Ваш массив панелей, на которые ссылаются в вашем примере, начинается с 1, массивы в Java начинаются с ZERO, у вас может быть потенциальная ошибка отключения, если у вас есть что-либо в (первом) элементе массива ZERO.

Использование классов типа safe List всегда лучше, чем работа с массивами напрямую, вам не придется сталкиваться с проблемами единой ошибки, которые вы создаете, не используя первый слот массива.

3 голосов
/ 24 февраля 2011
for(int i = 1; i<panel.length; i++)
{
    if(i%2 == 0)
    {
        panel[i].setBackground(Color.white);
    }
    else
    {
        panel[i].setBackground(Color.red);
    }
}
0 голосов
/ 24 февраля 2011
for (int i = 1; i < length; i+=2)
{
    panel[i].setBackground(red);
    panel[i+1].setBackground(white);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...