While(flag) 무한 루프를 사용할 때의 주의
18583 단어 자바
소개
이것은 내가 무한 루프를 사용할 때 실패하고 앞으로 조심하려고 할 것입니다.
초보자로 같은 함정에 떨어진 사람의 도움이 되면 무엇보다이다.
그리고 이것은 자신의 비망록이기도 하다.
소개
여기서 문제가되는 것은 arraySort () 메소드에서 while의 무한 루프입니다.
While의 무한 루프는 일이 끝나면 flag=false;로 하여 루프를 멈추는 것이지만, 이 flag=false;의 위치에 대해 논하고 싶다.
이것을 나는 시작해, 18행째에 넣고 있었다.
그렇다면 결과는
{31,29,45,77,84,96}이므로 정렬이 완료되지 않았습니다.
그래서 정렬의 모습을 내보내 보았다.
이것을 보면, 루프는 조도 2회, 돌린 곳에서 멈추고 있다.
두 번째 순환의 끝은 {84, 96}이라는 숫자로 교체가 발생하지 않습니다. 그래서, 여기서, flag가 false가 되어 3순째에 가지 않게 되어 있다.
당연하지만, flag=false; 는 for 루프의 바깥쪽에 낸다는 버릇을 붙이려고 한다.
해당 소스 코드
public class Main5_7 {//1
public static void main(String[] args){//2
int[] arrays1= {96,45,31,29,84,77};
display(arrays1, false);
arraySort(arrays1, true);
display(arrays1, true);
arraySort(arrays1, false);
display(arrays1, true);
}
public static void arraySort(int[] array, boolean orderType) {
//3
boolean a = true;
if(orderType) {//4
while(a) {
a=false; //16行目
for(int i=0 ; i<array.length-1 ; i++) {
// a=false; //なぜ、ここにあったらいけないのかわかりません。//18行目
//最後に入れ替えがないとだとfalseになる。
if(array[i]>array[i+1]) {
a=true;
change(array, i, i+1);
}
}
}
} else {
while(a) {
a=false;
for(int i=0 ; i<array.length-1 ; i++) {
if(array[i]<array[i+1]) {
a=true;
change(array, i, i+1);
}
}
}
}//4
}//3
public static void display(int[] array, boolean isSorted) {
if(isSorted) {
System.out.println("配列は整えられています。");
} else {
System.out.println("配列は整えられていません。");
}
for(int value : array) {
System.out.print(value + ",");
}//3
}
public static void change(int[] array,int i, int j) {
int temp;
temp = array[i];
array[i] = array[j];
array[j]= temp;
}
}
다음은 개선 중 코드의 비망록입니다.
配列は整えられていません。
96,45,31,29,84,77,
配列は整えられていません。
96,45,31,29,84,77,
配列は整えられています。
31,29,45,77,84,96,
配列は整えられています。
96,84,77,45,31,29,
개선 중 코드
public class Main5_7_1 {//1
public static void main(String[] args){//2
int[] arrays1= {96,45,31,29,84,77};
display(arrays1, false);
arraySort(arrays1, true);
display(arrays1, true);
arraySort(arrays1, false);
display(arrays1, true);
}
public static void arraySort(int[] array, boolean orderType) {
//3
if(orderType) {//4
while(true) {
for(int i=0 ; i<array.length-1 ; i++) {
if(array[i]>array[i+1]) {
change(array, i, i+1);
} else {
break;
}
}
}
} else {
while(true) {
for(int i=0 ; i<array.length-1 ; i++) {
if(array[i]<array[i+1]) {
change(array, i, i+1);
} else {
}
}
}
}//4
}//3
public static void display(int[] array, boolean isSorted) {
if(isSorted) {
System.out.println("配列は整えられています。");
} else {
System.out.println("配列は整えられていません。");
}
for(int value : array) {
System.out.print(value + ",");
}//3
System.out.println();
}
public static void change(int[] array,int i, int j) {
int temp;
temp = array[i];
array[i] = array[j];
array[j]= temp;
}
}
Reference
이 문제에 관하여(While(flag) 무한 루프를 사용할 때의 주의), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Choco_Late/items/08cb379f9e78a354d07d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)