관리 메뉴

IT journey

JAVA-제어문(feat.파일 입출력) 본문

개인공부공간/JAVA

JAVA-제어문(feat.파일 입출력)

step 2021. 6. 7. 22:32
728x90
반응형

직접 내용 정리하고 만든 예이니 퍼가실 때는 출처를 남겨주세요 :)

※ 참고사항

제어문에 들어가기 전, 증감연산자, 비교(관계)연산자와 논리연산자에 대해 올린 C언어-연산자 편을 참고하시면 아래에 작성되는 예들을 이해하는 데 수월하오니 참고부탁드립니다.

1. 조건문

(1) 기본 구조

#기본구조
if (조건문){
	조건문이 참일 경우 실행할 문장;
}else{
	조건문이 거짓일 경우 실행할 문장;
}

#다중 조건 판단
if (조건문){
	조건문이 참일 경우 실행할 문장;
}else if (조건문){
	이전 조건문이 거짓일 때 실행할 문장;
}else{
	이전 조건문이 거짓일 때 수행할 문장;
}

(2) 예

import java.io.InputStream;

public class Main {
  public static void main(String[] args) throws Exception {
    InputStream in = System.in;

    int a;
    a = in.read();
    int b=50;

    if (a>b){
      System.out.printf("a의 값이 더 큽니다.a의 값은 %d입니다.",a);
    }else if(a==b){
      System.out.println("a와 b의 변수에 저장된 주소값이 같습니다.");
    }else{
      System.out.printf("b의 값이 더 큽니다.b의 값은 %d입니다.",b);
    }
  }
}

위 코드와 관련된 메소드 내용을 정리해봅시다.

○ InputStream의 read메소드는 1byte의 사용자 입력을 받습니다.

하지만, read메소드로 읽은 데이터는 int 자료형으로 저장되어 아스키코드 값으로 반환해서 보여줍니다.

참고로, 아스키 코드 관련 링크는 아래와 같습니다.

https://namu.wiki/w/%EC%95%84%EC%8A%A4%ED%82%A4%20%EC%BD%94%EB%93%9C

2. switch/case 문

(1) 기본 구조

#기본 구조
switch(입력변수){
    case 입력값:
        break;
    case 입력값:
    	break;
    ...
    default:	...
    	break;
}

 

(2) 예

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Main {
  public static void main(String[] args) throws Exception {
    InputStream in = System.in;
    InputStreamReader reader = new InputStreamReader(in);
    BufferedReader br = new BufferedReader(reader);
    
    String word = br.readLine();
    int n = word.length();
    switch(n){
      case 10: word = "문자의 개수가 10개입니다.";
        break;
      case 9: word = "문자의 개수가 9개입니다.";
        break;
      case 8: word = "문자의 개수가 8개입니다.";
        break;
      case 7: word = "문자의 개수가 7개입니다.";
        break;
      default: word = "문자의 개수가 최소 0개입니다.";
        break;
    }
        System.out.println(word);
    }
}

위 코드와 관련된 메소드 내용을 정리해봅시다.

○ BufferedReader는 사용자가 엔터키를 입력할 때까지 사용자의 입력을 받아들입니다.

2. 반복문

(1) while 문

[기본 구조]

#기본 구조
while(조건식){
	조건이 참인 동안 실행할 문장;
}

참고로, 조건이 거짓이면 {} 블록을 한 번도 실행하지 않습니다.

[예]

import java.io.FileOutputStream;
import java.io.IOException;

public class Main{
  public static void main(String[] args) throws IOException{
    FileOutputStream output = new FileOutputStream("example.txt");
    
    int i=0;
    while(i<23){
      i = ++i;
      String sentence = i+"번째 IT journey 포스팅입니다.\r\n"; #\r\n은 줄바꿈 문자
      output.write(sentence.getBytes());
    }
    output.close();
  }
}

○ FileOutputStream는 파일을 생성해주고 내용을 쓸 때는 바이트 배열로 값을 써야 하므로 getByte() 메서드를 이용해 String을 byte 배열로 바꾸어줍니다. 

 

(2) do while 문

[기본 구조]

#기본 구조
do{
	조건이 참인 동안 실행할 문장;
}while(조건식);

참고로, 조건이 거짓이더라도 {} 블록을 한 번은 실행합니다.

[예]

import java.io.FileWriter;
import java.io.IOException;

public class Main{
  public static void main(String[] args) throws IOException{
    FileWriter fw = new FileWriter("example.txt");
    int i=0;
    do{
      i=++i;
      String senetence = i+"번째 포스팅입니다.\r\n";
      fw.write(senetence);
    }while(i<23);
    fw.close();
  }
}

○ FileWriter를 이용해 문자열을 직접 파일에 쓸 수 있습니다.

참고로, \r\n을 안 쓰고 싶다면 FileWriter 대신 PrintWriter를 이용해 쓰면 됩니다.

○ 파일의 내용을 추가하고 싶을 경우 new FileWriter(파일명,true)를 하고 쓰면 됩니다.

 

(3) for문

[기본 구조]

#기본 구조
for (초기치;조건문;증가치){
	조건식이 참일 경우 실행할 문장;
}

[예 1]

import java.io.InputStream;

public class Main {
  public static void main(String[] args) throws Exception {
    InputStream in = System.in;

    byte [] a = new byte[5];
    in.read(a);
    int b=50;
    for(int i=0; i<a.length; i++){
      if(a[i]<b){
        System.out.printf("b의 값이 더 큽니다.b의 값은 %d입니다.\n",b);
      }else if(a[i]==b){
        System.out.println("a와 b의 변수에 저장된 주소값이 같습니다.");
      }else{
        System.out.printf("a의 값이 더 큽니다. a의 값은 %d입니다.\n",a[i]);
      }
    }
  }
}

위 코드와 관련된 메소드 내용을 정리해봅시다.

○ 길이 5짜리 byte 배열을 만든 뒤 InputStream의 read메소드는 5byte의 사용자 입력을 받습니다.

하지만, read메소드로 읽은 데이터는 int 자료형으로 저장되어 아스키코드 값으로 반환해서 보여줍니다.

아스키 코드 관련 링크를 위 조건문 쪽에 나와있는 링크을 참고해주시면 됩니다.

[예 2]

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Main{
  public static void main(String[] args) throws IOException{
    PrintWriter pw = new PrintWriter("example.txt");
    for(int i=1;i<10;i++){
      String senetence = i+"번째 포스팅입니다.";
      pw.println(senetence);
    }
    pw.close();

    PrintWriter pw2 = new PrintWriter(new FileWriter("example.txt",true));
    for(int i=10;i<=23;i++){
      String senetence = i+"번째 포스팅입니다.\r\n";
      pw2.write(senetence);
    }
    pw2.close();
  }
}

○ PrintWriter를 이용해 문자열을 직접 파일에 쓸 수 있습니다. 추가하고 싶을 경우에는 위와 같이 FileWriter의 객체를 사용하면 됩니다.

(4) 반복문을 빠져나갈때는 break를, 조건문으로 돌아갈 때는 continue를 씁니다.

[예]

for문에 나온 예 2를 라인단위로 읽어드린 예입니다.

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main{
  public static void main(String[] args) throws IOException{
    BufferedReader br = new BufferedReader(new FileReader("example.txt"));
    while(true){
      String line = br.readLine();
      if(line == null) 
        break;
      System.out.println(line);
    }
    br.close();
  }
}

 

이전 발행 글

JAVA-자료형

728x90
반응형

'개인공부공간 > JAVA' 카테고리의 다른 글

JAVA - 클래스  (10) 2021.06.08
JAVA-자료형  (10) 2021.06.05
Comments