제어구조
제어구조 : 흐름을 제어한다.
- 흐름을 파악하는것이 중요. (작성순서와 상관없는 흐름이 만들어 질 수있음)
- 컴퓨터프로그램은 반복을 기본으로한다.
- 반복문에서 선택구조를 넣어, 프로그램이 계속해서 다른행동을 하는것 처럼 보이게 한다.
- 반복을하면서 데이터를 불러올 수 있다.
- 반복흐름 , 선택구조를 넣어서 다른행동처럼보임.
제어구조의 종류
- 선택문 if, else, else if
- 반복문 while, do - while , for
- 분기 switch, case, ...
while(조건){ }
국어,영어,수학 점수를 입력받아서 출력하는 성적표.
다시 출력하고싶다면 ? 반복되길 원한다면 ?
package ex2.control;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Scanner;
public class Program {
public static void main(String[] args) throws FileNotFoundException {
// 기본형식 : primitive type
int kor, eng;
int math;
int total;
float avg;
kor = 0;
eng = 0;
math = 0;
while(true)
{
// 여기에 성적을 입력하는 코드를 작성하시오.
Scanner sc = new Scanner(System.in); // 반복에 포함될 필요없음
System.out.println("┌────────────────────┐");
System.out.println("│ 성적 입력 │");
System.out.println("└────────────────────┘");
System.out.printf("국어 : ");
kor = Integer.parseInt(sc.nextLine());
System.out.printf("영어 : ");
eng = Integer.parseInt(sc.nextLine());
System.out.printf("수학 : ");
math = Integer.parseInt(sc.nextLine());
total = kor + eng + math;
avg = total / 3.0f;
System.out.println("┌────────────────────┐");
System.out.println("│ 성적 출력 │");
System.out.println("└────────────────────┘");
System.out.printf("국어 : %d\n", kor);
System.out.printf("영어 : %d\n", eng);
System.out.printf("수학 : %d\n", math);
System.out.printf("총점 : %2d\n", total);
System.out.printf("평균 : %26.2f\n", avg);
}
}
}
더보기
반복하고싶은 부분을 {}중괄호로 감싼다.
while(true){ while의 종속된 문장 } : 무한반복한다. while의 조건이 참인동안 실행된다. 실행 후 다시 시작점으로돌아간다.
반복을 끝내고싶을때 : 강제종료
while(조건)이 거짓이된다면 while문을 벗어날 조건이된다.
즉, (조건)에 변수를 넣어 선택구조를 만들 수 있다.
import java.util.Scanner;
public class Mar5th {
public static void main(String[] args) {
int score =0;
Scanner scan = new Scanner(System.in);
boolean more = true;
while(more) {
System.out.print("What grade did you get?");
score = scan.nextInt();
System.out.println("Let me know your score. It's "+score);
System.out.print("Did you wanna try again?");
more = scan.nextBoolean();
}
System.out.println("Bye");
}
}
boolean more = true
- boolean : 논리자료형, 참과 거짓을 의미
- more = true : 변수 more 를 true초기화한다.
while(more) { }
- while(more) : more가 true를 의미하기때문에 무한반복할것이다.
more = sc.nextBoolean();
- sc을 통해 nextboolean메소드를 호출한다.
- nextBoolean() : true 또는 false를 입력하면 그 문자열을 boolean값으로 바꾸어준다.
Unreachable 에러 발생
while(true) { 실행문 }
다른실행문;
while이 무한반복하기 때문에 while{ }뒤에 어느문장도 실행될 수없어 에러가 발생한다.
FileInputStream, FileOutputStream 을 이용해 파일복사 & 반복문
반복문을 통해 bmp파일의 바이트를 순서대로 입력하고, 출력하기
A라는 파일가져와서 B라는 파일을 만들어보자.
package ex2.control;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyProgram {
public static void main(String[] args) throws IOException {
// 1.res/img.bmp 파일을 읽기 위한 FileInputStream 객체 fis를 생성하고
//res/img_copy.bmp 파일로 쓰기 위한 FileOutputStream 객체 fos를 생성한다.
FileInputStream fis = new FileInputStream("res/aaa.bmp"); //이미지파일 불러오기
FileOutputStream fos = new FileOutputStream("res/img_copy.bmp"); //이미지파일출력
// 2. fis를 통해서 1 바이트를 읽어서 변수 b에 담는다.
// b의 값을 fos로 통해서 출력한다.
int b = 0;
while((b = fis.read()) != -1)
fos.write(b);
//3. 2번을 더 이상 읽어들인 값이 없을때까지 반복
fis.close();
fos.close();
System.out.println("복사완료");
}
}
FileInputStream fis = new FileInputStream("bmp파일이 저장된 상대경로");
- FileInputStream: 입력스트림을 이용해 파일경로를 불러온다.
- fis : 연산자 new를 통해 객체 fis 생성
FileOutputStream fos = new FileOutputStream("복사본 저장할 상대경로");
- FileOutpuStream : 출력스트림을 사용해 저장할 파일경로를 넣어준다.
- fos : 연산자 new를 통해 객체 fis 생성
int b = 0 ;
- 변수 b를 정수값으로 선언하고 0으로 초기화한다.
while((b = fis.read()) != -1)
- while : 제어구조의 종류, 반복문
- b = fis. read() : 입력스트림의 객체 fis이 read()를 호출한다. 불러온 바이트를 변수b에 대입
- read() : read()메소드는 한번 호출 될때 1바이트씩 불러온다. read()메소드는 더이상 불러올 값이 없으면 -1을 반환
- b != -1 : -1이 나올때까지 while문이 반복된다. while(조건)이 거짓일때까지 반복
fos.write(b);
- 객체 fos를 통해 출력할wrtite() 메소드를 호출하고, b를 출력버퍼에 넣어준다.
fis.close();
- FileInputStream을 닫아준다.
fos.close();
- FileOutputStream을 닫아준다.
System.out.println("복사완료");
- System.out을 이용해 println()메소드를 호출한다.
- "복사완료"문구를 넣어 실행종료를 알린다.
실행 후 복사완료가 뜨면, bmp파일이있는 폴더에서 복사된 파일이 확인가능하다.
'2021 Newlecture > JAVA' 카테고리의 다른 글
File Stream이용해 파일복사하기/ read(byte[] b)/ 배열과 for문 / (0) | 2021.03.09 |
---|---|
if / switch / 중첩된 제어구조 벗어나기 /do while (0) | 2021.03.08 |
nextInt() , nextLine()사용시 주의사항/Integer.pasrseInt() (0) | 2021.03.08 |
복합 대입연산자 / 삼항연산자 (0) | 2021.03.08 |
쉬프트연산 / 진법 / 0x000000ff과 교집합 (0) | 2021.03.05 |
FileInputStream으로 Bitmap File Size 출력 (0) | 2021.03.04 |
산술연산/ 단항,비교논리,비트,쉬프트 연산자/ FileStream이용한 메모장 입력출력 (0) | 2021.03.03 |
System.in.read() / Scanner / next() / 메모장내용 출력하기 (0) | 2021.03.02 |