Используйте значение снаружи для цикла - PullRequest
0 голосов
/ 12 апреля 2011
public class randomdemo {
    public static void main(String[] args)
    {
        Random rand = new Random();
        int [] varArray = new int[rand.nextInt(10)];

        System.out.println(varArray.length);
        int d = rand.nextInt(1999)-1000;
        for (int i=0;i<varArray.length;i++)
        {
            varArray[i]= rand.nextInt(1999)-1000;
            System.out.println(varArray[i]);

            if(d==varArray[i])
            {
                System.out.println(d);      
                System.out.println(i+1);
            }
            else
            { 
                System.out.println(d);
                System.out.println(0);
            }
        }
    }
}

Проблемы в коде:

Он выполняет оператор if-else несколько раз и отображает вывод if-else несколько раз, поскольку он находится в цикле for. Код должен выполнить оператор if-else только один раз, а остальная часть цикла for должна выполняться несколько раз. Поскольку оператор if использует значение varArray[i], я не могу исключить код из цикла for. Когда используется оператор break, он завершает цикл for. и полный вывод не отображается.

вывод: в настоящее время

7 -710 -249 0 -693 -249 0 172 -249 0 -488 -249 0 -48 -249 0 955 -249 0 869 -249 0

Как видите, длина массива равна 7. он отображает элемент массива, затем значение переменной d и значение 0 в цикле.

ожидаемый результат:

7 -710 -693 172 -488 -48 955 869 -249 0

вывод массива с 7 элементами должен быть 7 значений массива, за которыми следуют переменные d и 0.

Ответы [ 3 ]

0 голосов
/ 12 апреля 2011

Может быть, вы можете установить логический флаг для отслеживания выполнения вашего кода if else ... см. Код ниже.

    boolean flag = false;  // flag to track the if else

    System.out.println(varArray.length);
    int d = rand.nextInt(1999)-1000;
    for (int i=0;i<varArray.length;i++)
    { 
      ...
       if(!flag){
        if(d==varArray[i])
        {
            flag =true;
            System.out.println(d);      
            System.out.println(i+1);
        }
        else
        { 
             flag =true;
            System.out.println(d);
            System.out.println(0);
        }
       }
0 голосов
/ 12 апреля 2011

Попробуйте это.

public class randomdemo {

    public static void main(String[] args) {
        Random rand = new Random();
        int[] varArray = new int[rand.nextInt(10)];

        System.out.println(varArray.length);
        int d = rand.nextInt(1999) - 1000;
        int foundIdx = -1; // mark index if you find one!
        for (int i = 0; i < varArray.length; i++) {
            varArray[i] = rand.nextInt(1999) - 1000;
            System.out.println(varArray[i]);

            if (d == varArray[i]) {
                foundIdx = i + 1; // only the last match is saved
            }
        }
        if (foundIdx != -1) {
            System.out.println(d);
            System.out.println(foundIdx);
        } else {
            System.out.println(d);
            System.out.println(0);
        }
    }
}
0 голосов
/ 12 апреля 2011

Укажите точный сценарий, в котором вы хотите выполнить if-else, и внесите изменения в существующее условие if-else, чтобы оно выполнялось только один раз в цикле.Или вы можете обернуть существующее if-else внутри другого if-else, для которого условием может быть сценарий, в котором необходимо выполнить внутреннее if-else.

Например: пусть сценарий похож надля определенного значения i (скажем, когда i = 10) вы хотите выполнить цикл. Пожалуйста, измените код, как показано ниже.

if(i==10){
 if(d==varArray[i])
            {
                System.out.println(d);      
                System.out.println(i+1);
            }
            else
            { 
                System.out.println(d);
                System.out.println(0);
            }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...