package control;
public class Q4_4 {
public static void main(String[] args) {
int num = 0;
int sum = 0; //총합
int s = 1; //값의 부호를 바꿔주는 변수
for(int i = 1; ; i++, s=-s) {
num = i * s;
sum += num;
if(sum >= 100) break;
}
System.out.println("num : "+num);
System.out.println("sum : "+sum);
}
}
package control;
public class Q4_7 {
public static void main(String[] args) {
int value = (int)(Math.random()*6)+1;
System.out.println("value:"+value);
}
}
- Container 상속 : 컴포넌트를 추가(add)/지우기(remove), 컨테이너 내 배치방식(Layout) 설정
- JFrame 기능 : 컨테이너의 타이틀, 사이즈, 위치 등을 설정 가능
- JFrame은 기본적으로 Border Layout방식을 따른다. **이 부분은 별도 포스팅 예정이며 여기서는 불필요한 내용이다.
메소드 정리
■ 그림으로 표현한 JFrame
■ 코드화
[유의할 점] - DefaultCloseOperation설정을 하지 않으면 [x]를 누를 때 숨김처리(Not Visible)된다. * [x] 선택 시, 프로그램을 종료하려면 EXIT_ON_CLOSE 해주기
package window;
import javax.swing.JFrame;
class BasicJFrame extends JFrame{
BasicJFrame(){
this.setTitle("Basic JFrame");
//또는 super("Title"); 로 타이틀 지정 가능하다.
this.setLocation(200,200);
this.setSize(400,400);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
public class JFrameTest{
public static void main(String[] args) {
new BasicJFrame();
}
}
- 윈도우창에 들어가는 모든 독립적인 단위모듈을 컴포넌트라고 한다. - 이 중에서 다른 컴포넌트를 하나로 묶어주는 컴포넌트를 컨테이너라 한다. - 컨테이너 컴포넌트의 조상은 AWT패키지의 Cotainer이다. - 컨테이너 외의 컴포넌트들의 조상은 Swing패키지 내에서 JComponent이다.
package mymain;
public class WrapperTest {
public static void main(String[] args) {
Object[] arr = {10, "String", 12.5, 'c'};
//Object객체타입에 대입하면서, 각가의 리터럴이 실제로는 아래와 같이 오토박싱
//arr[0] = new Integer(10);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
}
}
>> 실행결과
10
String
12.5
c
[Auto-UnBoxing 예제_Object객체배열 안에 다양한 타입의 기본형 리터럴 입력]
package mymain;
public class WrapperTest {
public static void main(String[] args) {
Object[] arr = {10, "String", 12.5, 'c'};
int n = (Integer)arr[0];
//1) Auto-Boxing : arr[0] = new Integer(10);
//2) 참조타입 변경 : Object -> Integer (Down-Casting)
//3) Auto-unboxing : int n = <<대입되면서 기본형으로 변경
String s = (String)arr[1];
double d = (double)arr[2];
//(double)arr[2] ::형변환을 하면서 기본형으로 변경
char c = (char)arr[3];
System.out.println(n);
System.out.println(s);
System.out.println(d);
System.out.println(c);
}
}
class Exercise3_2 {
public static void main(String[] args) {
int numOfApples = 123; // 사과의 개수
int sizeOfBucket = 10; // 바구니의 크기 (바구니에 담을 수 있는 사과의 개수)
int numOfBucket = ( /* (1) */ ) ;
System.out.println("필요한 바구니의 수 :"+numOfBucket);
}
}
[5-1] 다음은 배열을 선언하거나 초기화한 것이다 잘못된 것을 고르고 그 이유를 설명하시오.
a. int[] arr[]; b. int[] arr = {1,2,3,}; c. int[] arr = new int[5]; d. int[] arr = new int[5]{1,2,3,4,5}; e. int arr[5]; f. int[] arr[] = new int[3][];
답) d,e
이유)
d : new int[ ]의 [ ] 안에 배열의 갯수를 지정할 수 없다.
e : [ ]안에 갯수를 넣을 수 없다.
*f. int[] arr[] = new int[3][]; //이건 가능한데, int[] arr[] = new int[][3]; 는 불가능
class Exercise5_3
{
public static void main(String[] args)
{
int[] arr = {10, 20, 30, 40, 50};
int sum = 0;
/*
(1) . 알맞은 코드를 넣어 완성하시오
*/
System.out.println("sum="+sum);
}
}
for(int i = 0; i < arr.length; i++)
{
sum += arr[i];
}
[5-4] 2차원 배열에 담긴 모든 값의 총합과 평균을 구하는 프로그램을 완성하시오
(실행 결과 :
total=325 average=16.25)
package arrayex;
class Exercise5_4
{
public static void main(String[] args)
{
int[][] arr = {
{ 5, 5, 5, 5, 5},
{10,10,10,10,10},
{20,20,20,20,20},
{30,30,30,30,30}
};
int total = 0;
float average = 0;
/*
(1) . 알맞은 코드를 넣어 완성하시오
*/
System.out.println("total="+total);
System.out.println("average="+average);
} // end of main
} // end of class
int total_length = 0;
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
total += arr[i][j];
total_length++;
}
}
average = (float)(total/total_length);
[5-5] 다음은 과 사이의 중복되지 않은 숫자로 이루어진 자리 숫자를 만들어내는 프로그램이다 (1)~(2) 에 알맞은 코드를 넣어서 프로그램을 완성하시오 .
package arrayex;
class Exercise5_4 {
public static void main(String[] args) {
int[] ballArr = {1,2,3,4,5,6,7,8,9};
int[] ball3 = new int[3];
// ballArr . 배열 의 임의의 요소를 골라서 위치를 바꾼다
for(int i=0; i< ballArr.length;i++) {
int j = (int)(Math.random() * ballArr.length);
int tmp = 0;
/*
(1) . 알맞은 코드를 넣어 완성하시오
*/
}
// ballArr 3 ball3 . 배열 의 앞에서 개의 수를 배열 로 복사한다
/* (2) */
for(int i=0;i<ball3.length;i++) {
System.out.print(ball3[i]);
}
} // end of main
} // end of class
package arrayex;
class Exercise5_4 {
public static void main(String[] args) {
int[] ballArr = {1,2,3,4,5,6,7,8,9};
int[] ball3 = new int[3];
// 배열 ballArr의 임의의 요소를 골라서 위치를 바꾼다
for(int i=0; i< ballArr.length;i++) {
int j = (int)(Math.random() * ballArr.length);
int tmp = 0;
tmp = ballArr[i];
ballArr[i] = ballArr[j];
ballArr[j] = tmp;
}
// 배열 ballArr 의 앞에서 3 개의 수를 배열 ball3로 복사한다
System.arraycopy(ballArr, 0, ball3, 0, 3);
for(int i=0;i<ball3.length;i++) {
System.out.print(ball3[i]);
}
} // end of main
} // end of class
[5-6] 다음은 거스름돈을 몇 개의 동전으로 지불할 수 있는지를 계산하는 문제이다. 변수 money의 금액을 동전으로 바꾸었을 때 각각 몇 개의 동전이 필요한지 계산해서 출력하라 (단, 가능한 한 적은 수의 동전으로 거슬러 주어야한다.)
(1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.
package arrayex;
class Exercise5_6 {
public static void main(String args[]) {
// . 큰 금액의 동전을 우선적으로 거슬러 줘야한다
int[] coinUnit = {500, 100, 50, 10};
int money = 2680;
System.out.println("money="+money);
for(int i=0;i<coinUnit.length;i++) {
/*
(1) . 알맞은 코드를 넣어 완성하시오
*/
}
} // main
}
[5-7] 문제 5-6에 동전의 개수를 추가한 프로그램이다. 커맨드라인으로부터 거슬러 줄 금액을 입력받아 계산한다. 보유한 동전의 개수로 거스름돈을 지불할 수 없으면, '거스름돈이 부족합니다.'라고 출력하고 종료한다. 지불할 돈이 충분히 있으면, 거스름돈을 지불한 만큼 가진 돈에서 빼고 남은 동전의 개수를 화면에 출력한다. (1)에 알맞은 코드를 넣어서 프로그램을 완성하시오.
class Exercise5_7 {
public static void main(String args[]) {
if (args.length != 1) {
System.out.println("USAGE: java Exercise5_7 3120");
System.exit(0);
}
// 문자열을 숫자로 변환한다. 입력한 값이 숫자가 아닐 경우 예외가 발생한다.
int money = Integer.parseInt(args[0]);
System.out.println("money=" + money);
int[] coinUnit = { 500, 100, 50, 10 }; // 동전의 단위
int[] coin = { 5, 5, 5, 5 }; // 단위별 동전의 개수
for (int i = 0; i < coinUnit.length; i++) {
int coinNum = 0;
/*
* (1)아래의 로직에 맞게 코드를 작성하시오.
* 1. 금액(money)을 동전단위로 나눠서 필요한 동전의 개수(coinNum)를 구한다.
* 2. 배열 coin에서 coinNum만큼의 동전을 뺀다. (만일 충분한 동전이 없다면 배열 coin에 있는 만큼만 뺀다.)
* 3. 금액에서 동전의 개수(coinNum)와 동전단위를 곱한 값을 뺀다.
*/
System.out.println(coinUnit[i] + "원: " + coinNum);
}
if (money > 0) {
System.out.println("거스름돈이 부족합니다 ");
System.exit(0); // 프로그램을 종료한다.
}
System.out.println("= 남은 동전의 개수 =");
for (int i = 0; i < coinUnit.length; i++) {
System.out.println(coinUnit[i] + "원:" + coin[i]);
}
} // main
}
>> 실행결과
C:\jdk1.8\work\ch5>java Exercise5_7
USAGE: java Exercise5_7 3120
C:\jdk1.8\work\ch5>java Exercise5_7 3170
money=3170
500 : 5 원
100 : 5 원
50 : 3 원
10 : 2 원
= = 남은 동전의 개수
500 :0 원
100 :0 원
50 :2 원
10 :3 원
C:\jdk1.8\work\ch5>java Exercise5_7 3510
money=3510
500 : 5 원
100 : 5 원
50 : 5 원
10 : 5 원
거스름돈이 부족합니다.
class Exercise5_7 {
public static void main(String args[]) {
if (args.length != 1) {
System.out.println("USAGE: java Exercise5_7 3120");
System.exit(0);
}
// 문자열을 숫자로 변환한다. 입력한 값이 숫자가 아닐 경우 예외가 발생한다.
int money = Integer.parseInt(args[0]);
System.out.println("money=" + money);
int[] coinUnit = { 500, 100, 50, 10 }; // 동전의 단위
int[] coin = { 5, 5, 5, 5 }; // 단위별 동전의 개수
for (int i = 0; i < coinUnit.length; i++) {
int coinNum = 0;
coinNum = money % coinUnit[i];
coin[i] -= coinNum;
money -= coinUnit[i]*coinNum;
System.out.println(coinUnit[i] + "원: " + coinNum);
}
if (money > 0) {
System.out.println("거스름돈이 부족합니다 ");
System.exit(0); // 프로그램을 종료한다.
}
System.out.println("= 남은 동전의 개수 =");
for (int i = 0; i < coinUnit.length; i++) {
System.out.println(coinUnit[i] + "원:" + coin[i]);
}
} // main
}
[5-8] 다음은 배열 answer에 담긴 데이터를 읽고 각 숫자의 개수를 세어서 개수만큼 '*'을 찍어서 그래프를 그리는 프로그램이다. (1)~(2)에 알맞은 코드를 넣어서 완성하시오.
class Exercise5_8 {
public static void main(String[] args) {
int[] answer = { 1, 4, 4, 3, 1, 4, 4, 2, 1, 3, 2 };
int[] counter = new int[4];
for (int i = 0; i < answer.length; i++) {
/* (1) 알맞은 코드를 넣어 완성하시오. */
}
for (int i = 0; i < counter.length; i++) {
/* 알맞은 코드를 넣어 완성하시오 (2) . */
System.out.println();
}
}
}
package arrayex;
public class Exercise5_11 {
public static void main(String[] args) {
int[][] score = {
{ 100, 100, 100 },
{ 20, 20, 20 },
{ 30, 30, 30 },
{ 40, 40, 40 },
{ 50, 50, 50 }
};
int[][] result = new int[score.length + 1][score[0].length + 1];
for (int i = 0; i < score.length; i++) {
for (int j = 0; j < score[i].length; j++) {
result[i][j] = score[i][j];
result[i][score[i].length]+=result[i][j];
result[score.length][j] += result[i][j];
result[score.length][result[0].length-1] += result[i][j];
}
}
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result[i].length; j++) {
System.out.printf("%4d", result[i][j]);
}
System.out.println();
}
}
}
[5-13] 단어의 글자위치를 섞어서 보여주고 원래의 단어를 맞추는 예제이다. 실행결과와 같이 동작하도록 예제의 빈 곳을 채우시오.
import java.util.Scanner;
class Exercise5_13 {
public static void main(String args[]) {
String[] words = { "television", "computer", "mouse", "phone" };
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < words.length; i++) {
char[] question = words[i].toCharArray(); // String을 char[]로 변환
/*
* (1) 알맞은 코드를 넣어 완성하시오 . char배열 question에 담긴 문자의 위치를 임의로 바꾼다.
*/
System.out.printf("Q%d. %s의 정답을 입력하세요 .>", i + 1, new String(
question));
String answer = scanner.nextLine();
// trim()으로 answer의 좌우 공백을 제거한 후 , equals로 word[i]와 비교
if (words[i].equals(answer.trim()))
System.out.printf("맞았습니다.%n%n");
else
System.out.printf("틀렸습니다.%n%n");
}
} // main의 끝
}