본문 바로가기

Programming/국비학원

220519 - 자료구조(queue), IO 기반 입출력, 안드로이드 구현 실습

자료 구조

 

 

  • Queue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class Message {
 
    private String command;
    private String to;
 
    public Message(String command, String to) {
        this.command=command;
        this.to=to;
    }
 
    public String getCommand() {
        return command;
    }
 
    public String getTo() {
        return to;
    }
    
}
 
 
import java.util.LinkedList;
import java.util.Queue;
 
public class QueueEx1 {
 
    public static void main(String[] args) {
        
        Queue<Message> messageQ = new LinkedList<Message>();  //다형성
        messageQ.offer(new Message("이메일","홍길동"));  //Stack의 push() 기능
        messageQ.offer(new Message("SMS","김철수")); 
        messageQ.offer(new Message("카카오톡","이영희"));
        while(!messageQ.isEmpty()) {
            Message msg = messageQ.poll();
            System.out.println(msg.getCommand()+"을(를) "+msg.getTo()+"에게 보냄");
        }
        
    }
 
}
cs

 //

이메일을(를) 홍길동에게 보냄
SMS을(를) 김철수에게 보냄
카카오톡을(를) 이영희에게 보냄

 

=> Message에 생성자에 println 작성하는 실수로 앞에 3줄 공백생겼었음

=> 출력 전 객체 생성할때 공백 3개 먼저 만들어낸 것

 

 

 

입출력

1. 파일 입력 = 저장되어 있는 파일을 읽어오는 기능
2. 파일 출력 = 저장장치에 내용 작성하는 기능

 

출발지(키보드, 파일, 프로그램) → 입력 스트림 → 프로그램 → 출력 스트림 → 도착지(모니터, 파일, 프로그램)

 

=> byte / char 기반 스트림으로 나뉨

 

 

  • FileInputStream
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
 
public class FileInputEx1 {
 
    public static void main(String[] args) {
        
        File dir = new File("C:/hk/javaproject/file");  //java.io.File클래스
        File file = new File("C:/hk/javaproject/file/info.txt");
        /*if (dir.exists()==true) {  //폴더 존재 여부
            System.out.println("이미 폴더가 존재합니다");
        }else {
            dir.mkdir();
            System.out.println("새로운 폴더가 생성되었습니다");
        }*/
        try {
            FileInputStream fileis = new FileInputStream(file);  //byte로 파일 읽어오기(=open)
            byte[] readBytes = new byte[fileis.available()];
//[객체.available] : file 전체 문자 읽어옴 / [100] : 100byte만 읽어옴 => 바이트 배열에 저장
           fileis.read(readBytes); //입력스트림 바이트들 읽고, int타입으로 리턴
            String str = new String(readBytes);
            System.out.println(str);  //출력 깨지면 한글 인코딩 방식 때문 (ANSI로 변환)
            fileis.close();  //파일 open(읽어오기)했으면  close 필수
        } catch (IOException e) {  //모든 입출력 관련
            System.out.println("파일을 읽을 수 없습니다");
        }
        
    }
 
}
//
전체  내용 출력
cs

 

 

  • FileOutputStream
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class FileOutputEx1 {
 
    public static void main(String[] args) {
        
        File savefile = new File("C:/hk/javaproject/file/save.txt"); 
//save.txt를 savefile 클래스 객체로 생성
        try { //입출력은 try catch 의무
            FileOutputStream fileos = new FileOutputStream(savefile); 
            String memo = "이 내용이 저장됩니다. 이 파일 저장 수업 끝나면 자바 구현 실습 시작.";
            fileos.write(memo.getBytes());  //작성할 내용 => byte로 저장됨
            fileos.close();
            System.out.println("save.txt 파일이 저장되었습니다.");
        } catch (IOException e) {
            System.out.println("파일을 저장할 수 없습니다.");
        }
    
    }
 
}
cs

 

 

 

안드로이드 구현
  •  

 

package com.hk.numbergame;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    //객체, 변수 선언
    EditText edtNumber;
    Button btnGameStart, btnConfirm;
    TextView tvHint;
    ImageView imgGame;
    int comNum;
    int count;
    int myNum;

    @Override
    protected void onCreate(Bundle savedInstanceState) {   //메인 메소드
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //선언된 객체를 xml 위젯과 연결 (casting=강제타입변환)  //xml -> java
        edtNumber = findViewById(R.id.edtNumber);
        btnGameStart = findViewById(R.id.btnGameStart);
        btnConfirm = findViewById(R.id.btnConfirm);
        tvHint = findViewById(R.id.tvHint);
        imgGame = findViewById(R.id.imgGame);

        //메서드로 기능 처리
        //게임시작 버튼 메서드
        btnGameStart.setOnClickListener(new View.OnClickListener() {  //온클릭리스너 인터페이스
            @Override
            public void onClick(View v) {  //추상메서드 오버라이드
                comNum = (int)(Math.random()*100)+1;
                count=0;
            }
        });

        //확인 버튼 메서드
        btnConfirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count++;
                myNum = Integer.parseInt(edtNumber.getText().toString());
                if (myNum>comNum){
                    tvHint.setText("더 작은 숫자를 넣어봐요");
                    imgGame.setImageResource(R.drawable.wrong);
                }else if (myNum<comNum){
                    tvHint.setText("더 큰 숫자를 넣어봐요");
                    imgGame.setImageResource(R.drawable.wrong);
                }else {
                    tvHint.setText("정답! ("+count+")");
                    imgGame.setImageResource(R.drawable.good);
                }
            }
        });

    }//OnCreate

}

 

 

=>

match_content =: 화면 전체
wrap_content : 들어갈만큼만 한정적 크기

※단위

Px(픽셀) : 해상도 낮을 수록 확대돼 보임 (1900->800일 때 찍을 수 있는 점 적어짐)
dp(밀도 단위) : 해상도와 상관 X, 안드로이드 디벨로퍼에서 사용