a: 합을 구해야 하는 정수n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)
리턴값: a에 포함되어 있는 정수n개의 합
2. 코드
public class Test {
long sum(int[] a) {
long sum = 0; // sum : a 배열안의 원소들의 합을 저장하는 변수
for(int i = 0; i < a.length; i++) {
sum += a[i];
}
return sum;
}
}
- Container.setLayout(LayoutManager Im) : Im을 새로운 배치관리자로 설정
//JPanel 패널에 BorderLayout 배치 관리자 설정
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
//컨텐트팬의 배치 관리자를 FlowLayout으로 변경
Container c = frame.getConentPane(); //컨텐트팬
c.setLayout(new FlowLayout());
FlowLayout
-컨테이너 크기가 변하면 컴포넌트 재배치
-FLowLayout(int align, int hGap, vGap)
align : 컴포넌트 정렬방법( FlowLayout.LEFT)
hGap : 좌우 컴포넌트 사이 수평간격, 픽셀단위, 디폴트는 5
vGap : 상하 컴포넌트 사이 수직간격, 픽셀단위, 디폴트는 5
FlowLayout 배치 관리자 활용
import javax.swing.*;
import java.awt.*;
public class swing3 extends JFrame{
public swing3() {
setTitle("FlowLayout Sample");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
//FlowLayout(int align, int hGap, int vGap)
c.setLayout(new FlowLayout(FlowLayout.LEFT,30,40)); //왼쪽으로 정렬
//align : 컴포넌트 정렬방법
//(FlowLayout.LEFT) (FlowLayout.RIGHT) (FlowLayout.CENTER(디폴트))
//hGap : 좌우 컴포넌트 사이 수평간격, 픽셀단위, 디폴트는 5
//vGap : 상하 컴포넌트 사이 수직간격, 픽셀단위, 디폴트는 5
c.add(new JButton("add"));
c.add(new JButton("sub"));
c.add(new JButton("mul"));
c.add(new JButton("div"));
c.add(new JButton("Calculate"));
setSize(300,200);
setVisible(true);
}
public static void main(String[] args) {
new swing3();
}
}
위의 코드를 실행하면 아래와 같은 창이 뜬다
창의 크기를 바꿨더니 아래와 같은 화면이 되었다.
BorderLayout
-배치방법 : 컨테이너 공간 5구역으로 분할 배치
(East,West,South,North,Center)
-컨테이너 크기가 변하면 재배치
-void add(Component comp, int index)
: comp 컴포넌트를 index 위치에 삽입
(BorderLayout.EAST)
BorderLayout 배치관리자를 사용하는 코드
import javax.swing.*;
import java.awt.*;
public class swing4 extends JFrame{
public swing4() {
setTitle("BorderLayout Sample");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new BorderLayout(30,20));
c.add(new JButton("Calculate"),BorderLayout.CENTER);
c.add(new JButton("add"),BorderLayout.NORTH);
c.add(new JButton("sub"),BorderLayout.SOUTH);
c.add(new JButton("mul"),BorderLayout.EAST);
c.add(new JButton("div"),BorderLayout.WEST);
setSize(300,200);
setVisible(true);
}
public static void main(String[] args) {
new swing4();
}
}
위의 코드를 실행하면 아래와 같은 창이 뜬다
창의 크기를 바꿨더니 아래와 같은 화면이 되었다.
GridLayout
-컨테이너 공간을 동일한 사각형 격자(그리드)로 분할하고 각 셀에 하나의 컴포넌트 배치
-생성자에 행수와 열수 지정(vGap,hGap)
-컨테이너 크기가 변하면 재배치
-GridLayout(int rows, int cols, int hGap, int vGap)
rows: 그리드 행수, 디폴트는 1
cols : 열수, 디폴트는 1
hGap 좌우 vGap 수직 디폴트는 0
GridLayout으로 입력 폼 만들기
import javax.swing.*;
import java.awt.*;
public class swing5 extends JFrame{
public swing5() {
setTitle("GridLayout Sample");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout grid = new GridLayout(4,2);
grid.setVgap(5);
Container c = getContentPane();
c.setLayout(grid);
c.add(new JLabel("이름")); c.add(new JTextField(""));
c.add(new JLabel("학번")); c.add(new JTextField(""));
c.add(new JLabel("학과")); c.add(new JTextField(""));
c.add(new JLabel("과목")); c.add(new JTextField(""));
setSize(300,200);
setVisible(true);
}
public static void main(String[] args) {
new swing5();
}
}
import java.io.*;
public class practice_file1 {
public static void main (String[] args) {
FileReader fin = null;
try {
//파일과 입력바이트 스트림 객체 fin 연결
fin = new FileReader("c:\\windows\\system.ini");
int c;
//파일 전체를 읽어 화면에 출력 (byte씩 c에 읽어들임)
while((c=fin.read())!=-1){ //파일의 끝을 만나면 read()는 -1 리턴
System.out.print((char)c); //byte c 를 문자로 변환하여 출력
}
fin.close();
}
catch(IOException e) {
System.out.println("입출력 오류");
}
}
}
InputStreamReader로 한글 텍스트 파일 읽기
-MS949 사용 (MS에서 만든 한글 확장 완성형 문자 집합)
import java.io.*;
public class practice_file2 {
public static void main(String[] args) {
InputStreamReader in = null;
FileInputStream fin = null;
try {
fin = new FileInputStream("hangul.txt");
in = new InputStreamReader(fin,"UTF-8");
int c;
System.out.println("인코딩 문자 집합은 "+in.getEncoding());
while((c=in.read())!=-1) {
System.out.print((char)c);
}
in.close();
fin.close();
}catch(IOException e) {
System.out.println("입출력 오류");
}
}
}
나는 MS949를 사용해도 한글이 깨진채로 출력됐다. UTF-8로 수정하니 한글이 깨지지 않고 출력되었다.
FileWriter 사용해서 파일 쓰기
-문자 단위 쓰기 : fout.write(‘A’)
-블록단위 쓰기 : fout.write(array,0,array.length)
import java.io.*;
import java.util.*;
public class practice_file3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
FileWriter fout = null;
int c;
try {
fout = new FileWriter("text.txt");
while(true) {
String line = sc.nextLine();
if(line.length()==0) break;
fout.write(line,0,line.length());
fout.write("\r\n",0,2); //한 줄 뛰기
}
fout.close();
}catch(IOException e) {
System.out.println("입출력 오류");
}
sc.close();
}
}
바이트 스트림
-입출력되는 데이터를 단순 바이트로 처리
-단위 byte
- 클래스
(InputStream/OutputStream) : 추상 클래스, 슈퍼 클래스
(FileInputStream/FileOutputStream) : 바이너리 파일 입출력, 파일로부터 바이트 단위로 읽거나 저장 (DataInputStream/DataOutputStream) : 자바의 기본 data type값(변수)을 바이너리 값 그대로 출력
FileOutputStream으로 바이너리 파일쓰기
package streamStudy;
import java.io.*;
public class practice_file4 {
public static void main(String[] args) {
byte b [] = {7,3,2,-1,65,32};
try {
FileOutputStream fout = new FileOutputStream("test.out");
for(int i=0;i<b.length;i++) {
fout.write(b[i]); //배열 b의 바이너리를 그대로 기록
}
fout.close();
}catch(IOException e) {
System.out.println("오류, 경로명 재확인");
return;
}
System.out.println("test.out 저장 성공");
}
}
cf) 바이너리 파일은 메모장으로 확인 불가
fileOutputStream으로 만든 바이너리 파일 "test.out"를 FileInputStream으로 읽기
package streamStudy;
import java.io.*;
public class practice_file5 {
public static void main(String[] args) {
byte b[] = new byte[6];
try {
FileInputStream fin = new FileInputStream("test.out");
int n=0, c;
while((c=fin.read())!=-1){
b[n]=(byte)c;
n++;
}
for(int i=0;i<b.length;i++) {
System.out.print(b[i]+" ");
}
System.out.println();
fin.close();
}catch(IOException e) {
System.out.println("오류, 경로 재확인");
}
}
}
표준 출력 스트림(System.out)과 연결한 버퍼크기가 5인 버퍼 출력 스트림을 이용한 출력
package streamStudy;
import java.io.*;
import java.util.Scanner;
public class practice_file6 {
public static void main(String[] args) {
FileReader fin = null;
int c;
try {
fin = new FileReader("test.txt");
BufferedOutputStream bout = new BufferedOutputStream(System.out,5);
// 20byte크기의 버퍼 설정. System.out 표준 스트림에 출력
while((c=fin.read())!=-1) {
bout.write(c); //버퍼가 꽉찰때 문자가 화면에 출력
}
//파일 데이터가 모두 출력된 상태
new Scanner(System.in).nextLine(); //enter 키 대기
//enter키를 누르면
bout.flush(); //버퍼에 남아있던 모든 문자 출력
fin.close();
bout.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}