뉴렉처/자바

[뉴렉처/자바] ★반복문과 제어문 2023.06.15

2023. 6. 15. 15:53
목차
  1. 1. 브레이크문 위치에 따른 차이
  2. 2.break VS continue
  3.  
  4. 2.1 문제1) 파일에서 성적을 5번째 '까지'만 읽어서 다음처럼 화면에 출력하시오
  5.  
  6. 2.2 문제2) 파일에서 성적을 5번째 '이후'의 값을 읽어들여라
  7.  
  8. 3.상태변화
  9. 3.1 문제 ) 파일에서 성적을 읽다가 100점을 만나면 그 이후의 성적을 모두 출력하시오(100포함O)
  10. 3.2 문제 ) 파일에서 성적을 읽다가 100점을 만나면 그 이후의 성적을 모두 출력하시오(100포함x)
  11.  
  12. 3.3 문제) 파일에서 성적을 읽다가 '두 번째 100 이후의 성적'을 모두 출력하시오(100점 미포함)
  13. 3.4 문제) 파일에서 성적을 5번'부터' 8번 '까지'만 읽어서 다음처럼 화면에 출력하시오.
  14.  
  15. 3.For문 코드블럭 안에는 변수를 왜 선언하지 않을까?
  16. 4.반복문 / 제어문 생각할 점
  17. 5.변수의 가시영역과 생명주기

1. 브레이크문 위치에 따른 차이

		for(int i=0; fscan.hasNext(); i++) {
			String word = fscan.next(); //next는 문자열의 공백을 기준으로 한 단어 한 문자를 읽는다.
			int kor = Integer.parseInt(word); //word의 데이터 값이 문자열이기 때문에 String -> Int로 바꾸는 Integer.parseInt()를 사용한다.
			
			if(i>=5)
				break;
			System.out.println(kor);
			
			if(i>=4)
				break;
		}

 

System.out.println(kor)을 기준으로 앞선 break문은 쓰면 뒤의 break문에 비해 1번 더 반복한다는 단점이 있다. 반면 뒤의 break문은 1번 더 반복되어 성능면에서 좋다. 하지만 뒤의 break문은 앞선 break문 보다 직관성이 떨어진다. 앞선 break문은 인간의 사고로 이해하기 쉬운반면, 뒤의 break문은 컴퓨터가 사고 하는 방식에 가깝다. 코드는 인간이 작성하기 한번 더 반복하더라도 인간의 사고를 따라가는 앞선 break문을 추천한다.

 

얼마나 직관적인가? 얼마나 효율적인가? 이 기준으로 break문의 위치를 잘 생각하자.

 

2.break VS continue

 

2.1 문제1) 파일에서 성적을 5번째 '까지'만 읽어서 다음처럼 화면에 출력하시오

exam.list
0.00MB

 

30, 49, 38, 49, 50

 

public class breakAndcontinue {

	public static void main(String[] args) throws IOException {

		FileInputStream fis = new FileInputStream("res/exam.list");
		Scanner fscan = new Scanner(fis);
        
		int index = 0; // while문 횟수 제한을 위해 인덱스 변수를 선언한다.
		while(fscan.hasNext()) { 
			String word = fscan.next(); //next는 문자열의 공백을 기준으로 한 단어 한 문자를 읽는다.
			int kor = Integer.parseInt(word);//word의 데이터 값이 문자열이기 때문에 String -> Int로 바꾸는 Integer.parseInt()를 사용한다.

				if(index==5)
					break;
			index++;
			System.out.printf("%d,",kor);
		}

 

2.2 문제2) 파일에서 성적을 5번째 '이후'의 값을 읽어들여라

public class breakAndcontinue {

	public static void main(String[] args) throws IOException {

		FileInputStream fis = new FileInputStream("res/exam.list");
		Scanner fscan = new Scanner(fis);
        
		for(int i=0; fscan.hasNext(); i++) {
			String word = fscan.next();
			int kor = Integer.parseInt(word);
			
			if (i<4) 
				continue;
			System.out.printf("%d,", kor);
	}	
}

 

3.상태변화

 반복문의 문제를 만날 때 '상태변화'의 개념을 잘 이해해야한다. 상태변화란 반복문이 시행되는 동안 특정 상태로 변화되면 결과가 바뀌는 걸 말한다. 다음 예시들을 통해 '상태변화'의 의미를 익혀보자.

 

3.1 문제 ) 파일에서 성적을 읽다가 100점을 만나면 그 이후의 성적을 모두 출력하시오(100포함O)

public class breakAndcontinue {

	public static void main(String[] args) throws IOException {

		FileInputStream fis = new FileInputStream("res/exam.list");
		Scanner fscan = new Scanner(fis);
        
		for(boolean found = false; fscan.hasNext();)
		{
			String word = fscan.next();
			int kor = Integer.parseInt(word);
			
			if(kor >= 100)
				found = true; // 출력으로 바뀌는 상태변화가 일어난다.
			
			if(!found) 
				continue; // 상태 변화가 일어나지 않으면 (found=false) 출력하지 않는다.
			System.out.printf("%d,",  kor);
		}
        
        fscan.close();
		fis.close();
	}	
}

 

3.2 문제 ) 파일에서 성적을 읽다가 100점을 만나면 그 이후의 성적을 모두 출력하시오(100포함x)

public class breakAndcontinue {

	public static void main(String[] args) throws IOException {

		FileInputStream fis = new FileInputStream("res/exam.list");
		Scanner fscan = new Scanner(fis);
        
		for(boolean found = false; fscan.hasNext();)
		{
			String word = fscan.next();
			int kor = Integer.parseInt(word);
			
			if(kor == 100)
				found = true;
				
			if(!found || kor == 100) 
				continue;
			System.out.printf("%d," , kor);
		}
        
        fscan.close();
		fis.close();
	}	
}

 

3.3 문제) 파일에서 성적을 읽다가 '두 번째 100 이후의 성적'을 모두 출력하시오(100점 미포함)

public class breakAndcontinue {

	public static void main(String[] args) throws IOException {

		FileInputStream fis = new FileInputStream("res/exam.list");
		Scanner fscan = new Scanner(fis);
        
		for(int count=0; fscan.hasNext();) { // 카운트 변수를 선언해서 상태변화를 표시했다.
			String word = fscan.next();
			int kor = Integer.parseInt(word);
			
			if(kor==100)
				count++;
			
			if(count < 2 || kor ==100)
				continue;
			
			System.out.printf("%d,", kor);
         }
         
        fscan.close();
		fis.close();
	}	
}

 

3.4 문제) 파일에서 성적을 5번'부터' 8번 '까지'만 읽어서 다음처럼 화면에 출력하시오.

public class breakAndcontinue {

	public static void main(String[] args) throws IOException {

		FileInputStream fis = new FileInputStream("res/exam.list");
		Scanner fscan = new Scanner(fis);
        
		for(int i=0; fscan.hasNext(); i++) {
			String word = fscan.next();
			int kor = Integer.parseInt(word);
			
			if (i<4) 
				continue;
			if(i==8)
				break;
			System.out.printf("%d," ,kor);
		}
         
        fscan.close();
		fis.close();
	}	
}

 

위의 코드들을 통해 우리는 상태변화 변수 found, count의 쓰임을 살펴봤다. 조건문에서 무언가 상태가 바뀌면 상태변화를 생각하자.

 

3.For문 코드블럭 안에는 변수를 왜 선언하지 않을까?

: 값이 바뀌지 않는다.

found의 값이 계속 false다. found의 true/false값을 이용해 코드를 진행하려는데 만약 for문안에 변수를 쓰면 값을 변화시킬 수 없다.

 

4.반복문 / 제어문 생각할 점

1.조건을 지정한다. 어떻게 조건을 지정해야할까?

2.인덱스를 쓸거냐 안쓸거냐에 따라 while문을 쓸지 for문을 쓸지 결정한다. 그리고 인덱스의 범위에 주의한다.

3.상태유지를 할거냐 안할거냐(저장변수필요)를 결정한다.

4.제어의 흐름을 어떻게 제어 할 것인가?

 

5.변수의 가시영역과 생명주기

코드블럭 내에 선언은 한번만 한다. 단 변수는 여러번 대입할 수 있다.

 변수는 블럭 들어가기 전에 미리 준비된다(정적 성질)

 

*정적(static)vs동적(dynamic) 의미

정적: 미리 정해져있다.

동적:그때 상황에 맞게 정해진다.

'뉴렉처 > 자바' 카테고리의 다른 글

[뉴렉처/자바] ★배열 2023.06.21  (0) 2023.06.21
[뉴렉처/자바] ★반복문과 제어문 2023.06.20  (0) 2023.06.20
[뉴렉처/자바]★반복문과 제어문 2023.06.19  (1) 2023.06.19
[뉴렉처/자바] ★반복문과 제어문 2023.06.16  (0) 2023.06.16
[뉴렉처/자바] ★반복문과 제어문 2023.06.14  (0) 2023.06.14
  1. 1. 브레이크문 위치에 따른 차이
  2. 2.break VS continue
  3.  
  4. 2.1 문제1) 파일에서 성적을 5번째 '까지'만 읽어서 다음처럼 화면에 출력하시오
  5.  
  6. 2.2 문제2) 파일에서 성적을 5번째 '이후'의 값을 읽어들여라
  7.  
  8. 3.상태변화
  9. 3.1 문제 ) 파일에서 성적을 읽다가 100점을 만나면 그 이후의 성적을 모두 출력하시오(100포함O)
  10. 3.2 문제 ) 파일에서 성적을 읽다가 100점을 만나면 그 이후의 성적을 모두 출력하시오(100포함x)
  11.  
  12. 3.3 문제) 파일에서 성적을 읽다가 '두 번째 100 이후의 성적'을 모두 출력하시오(100점 미포함)
  13. 3.4 문제) 파일에서 성적을 5번'부터' 8번 '까지'만 읽어서 다음처럼 화면에 출력하시오.
  14.  
  15. 3.For문 코드블럭 안에는 변수를 왜 선언하지 않을까?
  16. 4.반복문 / 제어문 생각할 점
  17. 5.변수의 가시영역과 생명주기
'뉴렉처/자바' 카테고리의 다른 글
  • [뉴렉처/자바] ★반복문과 제어문 2023.06.20
  • [뉴렉처/자바]★반복문과 제어문 2023.06.19
  • [뉴렉처/자바] ★반복문과 제어문 2023.06.16
  • [뉴렉처/자바] ★반복문과 제어문 2023.06.14
각시탈코더
각시탈코더
각시탈코더
각시탈코더
각시탈코더
전체
오늘
어제
  • 분류 전체보기 (203)
    • java (46)
      • 객체지향 (20)
      • 기본문법 (8)
      • 자바의 정석 연습문제 오답노트 (9)
      • 백준 알고리즘 (9)
    • Spring (17)
      • SpringMVC (8)
      • Spring DI와 AOP (5)
      • REST API와 Ajax (1)
      • Spring 프로젝트 (1)
      • Spring Security (0)
    • DB (47)
      • Oracle (15)
      • SQL오답노트 (25)
      • 튜닝 (0)
      • ERD (1)
      • DB 모델링 (5)
    • Servlet & JSP (3)
    • JDBC (2)
      • 기본 (1)
      • 스프링JDBC (1)
    • MyBatis (2)
    • JavaScript (2)
      • 코딩애플 (0)
      • 문법 (1)
    • React (0)
      • 코딩애플 (0)
    • HTML (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • CSS (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • Linux (0)
    • Git & GitHub (2)
      • Git (1)
    • CS (19)
      • 네트워크 (6)
      • HTTP (7)
      • 컴퓨터구조 (0)
      • 자료구조와 알고리즘 (2)
      • 기타 (4)
    • 개발설정 (2)
    • 기술면접 (0)
      • JAVA (0)
      • Spring (0)
      • DB (0)
      • 네트워크 (0)
      • 공통 (0)
    • 프로젝트 (2)
      • 게시판만들기 (2)
    • 기혁씨의 삽질표류기 (28)
    • 참고자료 (2)
      • 국비수업 (0)
      • 당당 프로젝트 (1)
    • 뉴렉처 (17)
      • 자바 (11)
      • 자바스크립트 (3)
      • 키워드 (0)
      • 숙제 (0)
      • CSS (0)
      • DB (3)
      • 서블릿 (0)
      • 스프링 (0)
      • DOM (0)
    • 내가 만든 학습그림 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 공부
  • 오류
  • 객체지향
  • 자바의정석기초편
  • 오라클
  • Java
  • 쿼리
  • Oracle
  • 코딩
  • 개발자
  • 자바
  • 국비수업
  • 연습문제
  • 백엔드
  • 웹프로그래밍
  • 모두의네트워크
  • 자바의정석
  • db
  • 스프링
  • 알고리즘
  • 백준
  • It
  • 서브쿼리
  • spring
  • 네트워크
  • 배열
  • SQL
  • 프로그래머스
  • 뉴렉처
  • 에러

최근 댓글

최근 글

hELLO · Designed By 정상우.
각시탈코더
[뉴렉처/자바] ★반복문과 제어문 2023.06.15
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.