Открытый класс Array {public static void main (String [] args) {int [] arr = {5,6,9, -5, -2,4, -3,1, -1}; int я = 0; int n = длина обр. int j = n-1; ...

-3
Saksham 21 Янв 2021 в 12:29

2 ответа

Лучший ответ

break выходит из ближайшего внутреннего цикла, в котором оно находится, в вашем случае while(arr[j]<0 && i<j). Это означает, что ваш while(true) - бесконечный цикл.

Вы можете исправить это, установив флаг, который вызовет внешний разрыв:

boolean goOn = true;
while(goOn) 
    while(goOn && arr[i]>0 && i<j) {
        while(goOn && arr[j]<0 && i<j) {
            if(i<j) {
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
                i++;
                j--;
            }else  {
                goOn = false;
                break;
            }
        }
        
    }
for(int x=0;x<arr.length;x++) {
    System.out.print(arr[x]+" "); //unreachable code
}

Или создайте ярлык и break там:

while(true) 
    while(arr[i]>0 && i<j) {
        while(arr[j]<0 && i<j) {
            if(i<j) {
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
                i++;
                j--;
            }else  {
                break exit;
            }
        }
        
    }
exit:
for(int x=0;x<arr.length;x++) {
    System.out.print(arr[x]+" "); //unreachable code
}

Последняя функция редко используется в Java.

0
daniu 21 Янв 2021 в 09:35

Это все из-за этой строчки кода:

    while(true) 

Остальная часть кода в цикле for станет недоступной, поскольку первый цикл while не будет завершен, что приведет к тому, что ваша программа будет работать в бесконечном цикле.

Недоступный код:

for(int x=0;x<arr.length;x++) {
    System.out.print(arr[x]+" "); //unreachable code
}

Чтобы исправить это, вам нужно установить переменную для условия first while , которая каким-то образом изменяет значение при выполнении условия. Исходя из вашего кода, вы можете разместить его в части кода else:

boolean run = true;
while(run) {
        while(arr[i]>0 && i<j) {
            while(arr[j]<0 && i<j) {
                if(i<j) {
                    int temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                    i++;
                    j--;
                } else {
                     run = false; 
                     break;
                 }
            }
            
        }
}
1
Donato Amasa 21 Янв 2021 в 09:35
65824514