개인 재정 자바 프로그래밍 및 루프 반복 - 더미

자바 프로그래밍 및 루프 반복 - 더미

차례:

비디오: Java - 반복문 (1/5) : while 2024

비디오: Java - 반복문 (1/5) : while 2024
Anonim

Java 프로그램의 루프를 작성하고 이해하기 쉽게하려면 Java의 break 및 continue 문이 루프 반복에 미치는 영향을 알아야합니다.

자바의 break 문

아래 프로그램을 보시라. 이 프로그램은 1에서 10까지 임의의 숫자를 임의로 생성하고 반복적으로 사용자에게 해당 숫자를 추측하도록 요청합니다.

목록 1

import static java. 랭. 체계. 아웃; import java. util. 스캐너; import java. util. 무작위; 공용 클래스 GuessAgain {public static void main (String args []) {스캐너 키보드 = 새로운 Scanner (System. in); int numGuesses = 0; int randomNumber = new 임의 (). nextInt (10) + 1; 아웃. println ("************"); 아웃. println ("추측 게임에 오신 것을 환영합니다"); 아웃. println ("************"); 아웃. println (); 아웃. print ("1에서 10까지의 int를 입력하십시오:"); int inputNumber = 키보드. nextInt (); numGuesses ++; while (inputNumber! = randomNumber) { out. println (); 아웃. println ("다시 시도하십시오 …"); 아웃. print ("1에서 10까지의 int를 입력하십시오:"); inputNumber = 키보드. nextInt (); numGuesses ++; } 인쇄 ("당신이이긴"); 아웃. println (numGuesses + "추측."); 건반. close ();}}

아래 그림은 코드 실행을 보여줍니다. 사용자는 5 가지 추측을합니다. 매번 컴퓨터는 추측이 맞는지 확인합니다. 잘못된 추측은 다시 시도하라는 요청을 생성합니다. 올바른 추측을 위해 사용자는 자신이 추측 한 수의 집계와 함께 당신이 승리하는 것을 얻습니다. 컴퓨터는 매번 여러 번 반복하여 여러 번 반복하여 사용자의 추측이 무작위로 생성 된 숫자와 같은지 확인합니다. 사용자가 추측 할 때마다 컴퓨터는 추측의 집계에 1을 더합니다. 사용자가 정확한 추측을하면 컴퓨터는 해당 계산을 표시합니다.

이 프로그램에 대해 어색한 점이 있습니까? 글쎄, 몇 가지 진술이 프로그램에서 두 번 이상 나타납니다. 일반적으로 프로그램의 한 부분에서 다른 부분으로 복사되는 문장은 걱정할 필요가 없습니다. 그러나 전반적인 전략은 의심스러워 보입니다. 이 프로그램은 루프 앞에서 사용자로부터 번호를 얻고 루프 내부에서 (다시) 번호를 가져옵니다.

print ("1에서 10까지의 int를 입력하십시오:"); int inputNumber = 키보드. nextInt (); numGuesses ++; while (inputNumber! = randomNumber) {out. println (); 아웃. println ("다시 시도하십시오 …"); . print ("1에서 10까지의 int를 입력하십시오:"); inputNumber = 키보드. nextInt (); numGuesses ++; }

이 코드는 루프를 만들기위한 표준 트릭을 사용합니다. 루프를 시작하는 것입니다. 패턴은 더 많은 입력 받기

} while 루프의 맨 처음에, 컴퓨터는 사용자의 입력과 관련된 조건을 검사합니다. 따라서 컴퓨터는 사용자가 입력을 줄 때까지 루프를 시작하지 않습니다. 그런 다음 컴퓨터가 루프 안에 있으면 컴퓨터는 루프의 다음 반복을 공급할 입력을 더 요청합니다. 트릭이 이상하게 보일지라도 작동합니다. 

while (true) {

out. print ("1에서 10까지의 int를 입력하십시오:"); inputNumber = 키보드. nextInt (); numGuesses ++;

if (inputNumber == randomNumber) {

중단;

} println (); 아웃. println ("다시 시도하십시오 …"); } 인쇄 ("당신이이긴"); 아웃. println (numGuesses + "추측."); 건반. 사용자의 관점에서 보면 Listing 2의 코드는 Listing 1의 코드와 완전히 똑같다. 두 프로그램의 결과를 보려면 위의 그림을 참조한다. 차이점은 Listing 2는 키보드를 한 번 호출한다는 것입니다. nextInt. 이 호출은 루프 안에 있으므로 컴퓨터는 입력을 테스트하지 않고 루프에 들어가야합니다.  -

루프의 상태를 보면 어떻게 작동하는지 볼 수 있습니다. 루프의 조건은 항상 참입니다. 무슨 일이 일어나 든 루프의 상태는 항상 테스트를 통과합니다. 따라서 루프의 상태는 큰 사기입니다. 루프의 상태에서 테스트가 실패하면 루프에서 벗어날 수 없습니다. 대신 루프 내부에있는 break 문을 누를 때 점프합니다 (if (inputNumber == randomNumber)로드 블록을 지나갈 때 break 문을 치게됩니다). 모든 것이 매우 잘 작동합니다
. -
컴퓨터가 루프에있는 break 문을 실행하면 컴퓨터가 루프 밖으로 나옵니다 (루프 뒤의 첫 번째 문으로 이동). break 문을 사용하면 컴퓨터는 단 하나의 루프에서 벗어납니다. 이 루프가 다른 루프 (외부 루프) 내부에있는 경우 컴퓨터는 외부 루프 외부로 점프하지 않습니다. (int i = 0; i <3; i ++) {

for (int j = 0; j <100; j ++)에 대한 public static void main (String [] args) { public class BreakOutOfLoop) {

시스템. 아웃. print (j + ""); if (j> 9) {break;}

}

시스템. 아웃. println ("나는 부서졌다!");

}

}}

설명하기 위해 다음 그림에는 위 코드의 결과가 나와 있습니다. 

컴퓨터가 break 문에 도달하면 제어가 I broken out 문으로 이동합니다.내가 문을 부 That다는 것은 j 루프의
외부 이지만 i 루프의 안에있다. 프로그래머 관점에서 보면 Listing 2의 코드는 Listing 1의 코드보다 자연 스럽다. 결국 게임은 어떻게 진행될 것인가? 사용자는 추측하고 컴퓨터가 추측을 확인한 다음 추측이 정확하지 않으면 컴퓨터가 "다시 시도하십시오. "Listing 2에 설명 된 것과 같은 일련의 이벤트입니다. 그러나 Listing 1에서 루프 내의 코드는 역순으로 발생하는 이벤트를 설명하는 것처럼 보입니다."다시 시도하십시오 "라고 말한 다음 사용자가 숫자를 입력합니다. Listing 2는 Listing 1의 루프 프라이밍 기법 대신 좋은 대안을 제공한다. 그렇다면 프로그래머는 왜 자신의 루프를 프레이밍해야 하는가? break 문에는 숨겨진 단점이 있습니까? 답변은 당신의 관점에 달려 있습니다. 일부 프로그래머는 루프의 break 문이 혼란 스럽다고 생각합니다. 성명에서 성명서로 점프하는 것은 모두 어지럽게 만들고 1960 년대에

스파게티 코드

라고 불리는 것을 떠올리게합니다. (스파게티 코드는 goto 문을 사용하여 하나의 명령문에서 다른 명령문으로 건너 뜁니다.

파스칼 바이 예제 저자 B Burd는 "goto로 프로그래밍하는 것은 하수도 시스템을 통해 파리를 돌아 다니며 파리를 여행하는 것과 같습니다. 짧은 컷이지만 그 중 어느 것도 가져갈 가치가 없습니다. ") 루프의 break 문은 규칙이 아니라 예외입니다. 원한다면 사용하십시오. 그러나 다른 사람들의 Java 코드에서 그 중 많은 것을 찾을 것으로 기대하지 마십시오. Java의 continue 문 Listing 3은 프로그램의 루프에 대한 더 많은 비밀 소스를 제공한다. 1에서 20까지 3 개의 숫자를 무작위로 생성하는 게임을 상상해보십시오. 사용자는 숫자를 추측하여 5 번 회전합니다. 사용자가 올바른 추측을 입력하면 프로그램이 사용자에게 축하를 보냅니다. ("좋은 추측"프로그램을 말합니다.) 사용자가 잘못된 추측을 입력하면 프로그램은 피드백을 제공하지 않습니다. Listing 3에는 모든 일을 처리 할 수있는 코드가 포함되어있다.

목록 3

import static java. 랭. 체계. 아웃; import java. util. 스캐너; import java. util. 무작위; 공용 클래스 GuessAgainAndAgain {public static void main (String args []) {스캐너 키보드 = 새 Scanner (System.in); int inputNumber; int randNum1 = 새로운 무작위 (). nextInt (20) +1; int randNum2 = 새로운 무작위 (). nextInt (20) +1; int randNum3 = 새로운 무작위 (). nextInt (20) +1; 아웃. println ("************"); 아웃. println ("추측 게임에 오신 것을 환영합니다"); 아웃. println ("************"); 아웃. println (); for (int i = 0; i <5; i ++) {out. print ("int를 입력하십시오:"); inputNumber = 키보드. nextInt (); if (inputNumber! = randNum1 && inputNumber! = randNum2 && inputNumber! = randNum3) { continue;

}

println ("좋은 추측!"); 아웃. println ();} 출력합니다. 인쇄 ("숫자는"); 아웃. print (randNum1 + ""); 아웃. 인쇄 (randNum2 + ""); 아웃. print (randNum3 + ""); 건반. close ();}}

이 그림은 그러한 프로그램의 실행을 보여줍니다.

Java의 continue 문은 컴퓨터가 루프 내부의 나머지 문을 뛰어 넘는다는 것을 알려줍니다.즉, 루프 내에서 나머지 명령문을 실행하는 대신 컴퓨터는 루프의 다음 반복 시작으로 이동합니다. 따라서 Listing 3에서 inputNumber가 프로그램의 무작위로 생성 된 숫자가 아닌 경우 컴퓨터는 "좋은 추측"코드를 뛰어 넘어 루프 카운터 (변수 i)를 증가시키고 사용자에게 다른 입력 값을 묻습니다. (물론 루프 카운터가 한계에 도달하면 컴퓨터는 다른 반복을 실행하지 않고 대신 컴퓨터가 루프에서 빠져 나와 루프 뒤의 모든 명령문을 실행합니다.)

Listing 3을 쉽게 다시 작성할 수 있습니다 그래서 코드에는 continue 문이 없습니다. if 문 안에 "좋은 추측"코드를 넣어야하지만 괜찮습니다. continue 문은 Listing 3 프로그램의 모양을 개선하는 데별로 도움이되지 않습니다. 그러나 if 문 안에 코드를 중첩하지 않으려면 continue 문이 유용합니다. 아마도 응용 프로그램에서 루프의 나머지 부분은 복잡한 명령문 시퀀스 일 것입니다. 이 시퀀스를 if 문 안에 넣어서 복잡하게 보이게하고 싶지는 않습니다. 또는 응용 프로그램에서 나머지 루프를 건너 뛰는 경우는 거의없고 if 문에 루프의 나머지 부분을 포함시키지 않으므로이 희귀성을 강조하려고합니다. 두 경우 모두 continue 문이 올바른 선택 일 수 있습니다.

자바 프로그래밍 및 루프 반복 - 더미

편집자의 선택

플립 비디오 인형 치트 시트 - 인형

플립 비디오 인형 치트 시트 - 인형

플립 비디오 캠코더는 가장 사용하기 쉬운 캠코더입니다. 세계. 플립 비디오를 사용하면 비디오를 가리키고 촬영 한 다음 컴퓨터로 비디오를 복사 할 수 있습니다. 몇 번의 클릭 후, 당신은 Facebook, MySpace 및 YouTube에서 귀하의 작품을 과시하고 있습니다. Flip의 버튼을 해독함으로써 비디오를 고통없이 촬영하는 방법을 찾으십시오. 알아보기 ...

귀하의 디지털 필름에 대한 개인 상영 - 인형

귀하의 디지털 필름에 대한 개인 상영 - 인형

오늘, DSLR 필름 심사. HD가 장착 된 정교한 대형 스크린 TV는 여러 스피커의 서라운드 사운드 스테레오와 함께 아주 좋은 간식을 제공합니다. 따라서 영화 밤을 장소에서 쉽게 주최 할 수 있으며 영화관에 갈 수도 있습니다. ...

디지털 영화에 정적 제목을 추가하는 방법 - 인형

디지털 영화에 정적 제목을 추가하는 방법 - 인형

초연 요소는 다양한 선택을 제공합니다 DSLR 영화의 타이틀 선택 항목, 하위 3 분의 1 로케이터 정보. 로케이터 정보는 뉴스 세그먼트 및 다큐멘터리에서 장면의 사람이나 장소를 설명하는 데 사용되는 ID와 같습니다. 사람의 경우 이름과 설명이라는 두 줄로 구성됩니다. 예를 들어, Charles Dickens / Writer, ...

편집자의 선택

관계 속의 분노를 다루는 - 인형

관계 속의 분노를 다루는 - 인형

우리 모두는 때때로 파트너들과 화를 낸다. 분노가 당신과 당신의 관계에 미치는 파괴적인 영향을 최소화하는 데 도움이되는 다음 요령을 시도하십시오. 당신이 분노의 징후를 처음 알기 시작할 때, 당신의 파트너에게 무슨 일이 일어나는지 물어보십시오. 화가 난 사람을 상처 입히려 고합니다.

자폐증 진단의 영향 - 인형

자폐증 진단의 영향 - 인형

자폐아를 찾는 것이 매우 어렵습니다. 앞으로의 길은 쉬울 것이라고 아무도 말할 수 없습니다. 자녀의 생년월일과 본인의 생년월일에 관한 스크립트를 다시 작성해야 할 수도 있습니다. 당신은 지금 다루어야 할 새로운 쟁점, 압박 및 결정들을 가지고 있습니다. 그리고 주변 사람들은 ...

당신이 종속인지 결정하기 - 인형

당신이 종속인지 결정하기 - 인형

다음 증상 목록에서 확인하십시오. 당신은 모두가 공손 할 필요는 없으며, 코펜던트의 심각성 정도가 있습니다. 치료를하지 않으면 시간이 지남에 따라 코드 종속성이 악화되지만 도움을 받아 복구 할 수 있고 작업에서 훨씬 더 효과적 일 수 있습니다 ...

편집자의 선택

짧은 명상 묵상 시도 - 인형

짧은 명상 묵상 시도 - 인형

당신의 마음을 집중할 수있는 능력은 마음 챙김 명상을 통해 가장 강력하게 개발됩니다. Mindfulness 명상 중 하나는 호흡의 mindfulness입니다. 이것은 숨을 의식적으로 인식하는 것입니다. 명상을 스스로 시도하려면 다음 단계를 따르십시오. 자신의 호흡 감을 알아야합니다. 변경할 필요가 없습니다 ...

마음가짐의 세 측면 - 인형

마음가짐의 세 측면 - 인형

마음가짐은 세 가지 측면으로 주의 깊은 인식. 이 목록을 인쇄하여 핀이 무엇인지 생각 나게하십시오. 의도 - 당신의 의도는 당신이 마음가짐을 연습함으로써 얻고 자하는 것입니다. 스트레스를 줄이고 감정적 인 균형을 유지하거나 발견 할 수 있습니다.

다른 명상을 시도하십시오 - 인형

다른 명상을 시도하십시오 - 인형

명상 확장이라는 인식은 명상 확장의 중심에 있습니다. Mindfulness 명상 연습. 앉는 자리는 수천 년 동안 명상을 위해 그리고 정당한 이유로 사용되었습니다. 어떻게 평소에 앉아 있니? 당신이 대부분의 사람들과 비슷하다면, 아마 의자 나 소파 뒤에 기대어집니다. 네가 괜찮다면 ...