2017년 1월 23일 월요일

[JAVA]Hexa to bin(16진수 정수 -> 2진수 정수)


16진수 문자열을 2진수 문자열로 변환하는 프로그램 
 
1] 문제
 
16진수의 문자열을 2진수의 문자열로 변환하는 프로그램을 작성한다.
ex]
16진수 문자열을 입력하시오 :
1ac
“1ac”에 대한 이진수는
0001
1010
1011
1100
 
 
 
2] 알고리즘 및 설명
 
Step 1 : String 배열 hexa16진수 ‘0’~‘f’에 해당하는 이진수 문자열 값을 정의한다.
Step 2 : String bin16진수 문자열을 입력 받는다.
Step 3 : bin문자열의 charAt(index)메소드를 통하여 ‘0’~‘f’에 해당하는 이진수 문자열 값을 Switch을 이용하여 출력한다.
 
 
 
3] 프로그램 코드
import java.util.*;

public class Hexa {
public static void main(String args[]) {
String[] hexa =
               { "0000", "0001", "0010", "0011", "0100",
                 "0101", "0110", "0111", "1000", "1001", "1010",
 "1011", "1100", "1101", "1110", "1111" };

                String bin;
System.out.println("16진수 문자열을 입력하시오 : ");
bin = new Scanner(System.in).next();
System.out.println("bin+에 대한 이진수는 ");

for (int i = 0; i < bin.length(); i++) {
switch (bin.charAt(i)) {
case '0':
System.out.println(hexa[0]);
break;
case '1':
System.out.println(hexa[1]);
break;
case '2':
System.out.println(hexa[2]);
break;
case '3':
System.out.println(hexa[3]);
break;
case '4':
System.out.println(hexa[4]);
break;
case '5':
System.out.println(hexa[5]);
break;
case '6':
System.out.println(hexa[6]);
break;
case '7':
System.out.println(hexa[7]);
break;
case '8':
System.out.println(hexa[8]);
break;
case '9':
System.out.println(hexa[9]);
break;
case 'a':
System.out.println(hexa[10]);
break;
case 'b':
System.out.println(hexa[11]);
break;
case 'c':
System.out.println(hexa[12]);
break;
case 'd':
System.out.println(hexa[13]);
break;
case 'e':
System.out.println(hexa[14]);
break;
case 'f':
System.out.println(hexa[15]);
break;
default:
System.out.println("wrong value");
}
}
}
}

 
4] 실행 결과













[JAVA]Histogram program

 

입력 값들의 히스토그램을 만드는 프로그램


1] 문제
 
입력 값들의 분포를 시각적으로 볼 수 있는 히스토그램을 만드는 프로그램을 작성하시오. 이 프로그램은 1100사이의 정수 10개를 일어야 하고 1~10, 11~20 등의 범위에 드는 값들의 횟수를 아래와 같이 출력하여야 한다.
 
ex]
1-10 : ****
11-20 :**
21-30 :**
.....
 
 
2] 알고리즘 및 설명
 
Step 1 : 배열 2(Sting[] arr, int[] num)를 선언한다.
num배열은 값은 받아 저장할 배열이고,
arr배열num의 입력 값에 따라 ‘*’를 넣어 시각적으로 출력할 배열이다.
 
Step 2 : 배열 num1-100의 정수 10개를 입력 받는다.
Step 3 : ((i*10)+1)((i+1)*10)를 통해 arr배열에 ‘*’을 채워 넣는다.
I0을 넣으면 1-11이 되고 1를 넣으면 11-20이 되는 식이다.
 
Step 4 : 반복문을 통해 arr배열을 출력하여, 입력 값들의 분포를 출력한다.
 
 
 
3] 프로그램 코드

import java.util.*;

public class arrHistogram {
public static void main(String args[]) {

String[] arr = new String[10];

int[] num = new int[10];
Scanner scan = new Scanner(System.in);

for (int i = 0; i < 10; i++) {
     System.out.println((i + 1)+"번째 값을 입력하세요.");
     num[i] = scan.nextInt();
} // 배열 num에 1-100개 정수 10개를 입력받는다.

for (int i = 0; i < 10; i++) {
arr[i] = ((i * 10) + 1) + "-" + ((i + 1) * 10) + ":";

    // arr의 0번째 인덱스에 값의 범위를 표시하는 String을 넣는다.

for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
if ((i * 10)+1<=num[j] && num[j]<=(i+1)*10)
arr[i] += "*";
   // 배열 num의 인덱스의 값에 따라 배열arr에 ‘*’를 넣는다.

for (int i = 0; i < 10; i++) {

System.out.println(arr[i]);
} // 배열 arr을 출력한다.
}

}

 
 
4] 실행 결과























2017년 1월 19일 목요일

[JAVA]비행기 class 설계


비행기를 나타내는 Class 설계

1] 문제
 
비행기를 나타내는 Plane라는 이름의 클래스를 설계하라.
1)필드를 정의하라. 모든 필드는 전용 멤버로 하라.
2)모든 필드에 대한 접근자와 설정자메소드를 작성한다.
3)Plane클래스의 생성자를 몇 개를 중복 정의하라.
4)PlaneTest라를 이름의 클래스를 만들고,
main()에서 객체 여러 개를 생성하고 접근자와 설정자를 호출하여 보라.
5)생성된 비행기의 개수를 나타내는 정적 변수인 planes를 추가하고,
생성자에서 증가시켜 보자.
6)Plane클래스에 정적 변수 planes의 값을 반환하는 정적 메소드 getPlanes()
추가하고 main()에서 호출하여 보라.
 
 
 
2] 알고리즘 및 설명
Step 1 : 객체를 생성하고 예제에 맞는 필드를 선언한다.
 
Step 2 : 생성자를 받는 값의 개수에 따라 오버로딩하고, 인자 값을 받지 않는 필드는 NULL로 초기화 한다. 또한 모든 필드에 대하여 접근자설정자를 작성한다.
 
Step 3 : 필드에 정적 변수 count를 선언하고, 이를 반환하는 정적 메소드
getPlanes()도 추가한다.
 
Step 4 : main()에서 객체가 잘 생성되었는지
1)접근자와 설정자 호출,
2)객체 생성시 값의 개수에 따른 생성자 정의,
3)정적 변수와 정적 메소드
잘 동작하는지 확인한다.
 
 
  
3] 프로그램 코드

class Plane {
private String company;
private String model;
private int psg;
public static int count = 0;

public Plane(String company, String model, int psg) {
this.company = company;
this.model = model;
this.psg = psg; // 필드를 정의.
count++; // 정적 변수 정의.
}

public Plane(String company, String model) {
this(company, model, 0);
}

public Plane(String company) {
this(company, "\0", 0);
}

public Plane() {
this("\0", "\0", 0);
} // 여기까지 생성자 중복 정의.

public String Getcom() {
return company;
}

public String Getmo() {
return model;
}

public int Getpsg() {
return psg;
}
// 각 필드의 접근자 메소드 정의.

public void Setcom(String scom) {
company = scom;
}

public void Setmo(String smo) {
model = smo;
}

public void Setpsg(int spsg) {
psg = spsg;
}
// 각 필드의 설정자 메소드 정의.

public static int getPlanes() {
return count;
}// 정적 변수를 반환하는 정적 메소드 정의.
}

public class PlanTest {
public static void main(String args[]) {
Plane p1 = new Plane("Asisna", "co-22", 500);
Plane p2 = new Plane("Jeju", "S1027");
Plane p3 = new Plane("k-12");
Plane p4 = new Plane(); // 여러 객체 생성.
p1.Setpsg(400); // 설정자 호출.
System.out.println(p1.Getpsg()); // 접근자 호출.
System.out.println(p3.Getmo()); // 인자를 받지 않는 생성자는 NULL.
System.out.println(Plane.count); // 정적 메소드 ‘count’ 호출.
}
}


 

4] 실행 결과
 









[JAVA]날짜로 요일 알아보기


, , 일을 받아서 무슨 요일인지 출력하는 프로그램.
 

1] 문제
, , 일을 받아서 무슨 요일인지 출력하는 프로그램을 작성하라.
[실행결과]
연도를 입력하시오: 2012
월을 입력하시오 : 7
일을 입력하시오 : 28
2012728일은 토요일입니다.
 
 
2] 알고리즘 및 설명
Step 1 :
1900/1/1(일요일)부터 입력된 날짜 사이에 얼마나 많은 날이 있는지를 계산한다.
(0111일부터 할 수 있지만 오차와 루핑을 줄이기 위해 1900년도에서부터 일수를 계산한다.)
 
Step 2 :
입력받을 변수(year,month,days)와 총합일수를 저장할 변수를 선언하고 입력받는다.
Step 3 :
(year-1900)/4가 윤년의 횟수이므로 이 값을 총합일수에 더한다.
윤년을 구하는 공식은 year/4-year/100+year/400이지만 1900-2100년까지는 위의 식의 결과 값과 윤년의 횟수가 같다.
 
Step 4 :
주어진 연도가 윤년이고 1월이나 2월이면 총합일수에서 1을 한다.
Step 3에 의해 1900/1/1은 위의조건에 만족하여 총합일수-1이 된다. 따라서 총합일수의 초기 값을 1로 정한다.
 
Step 5 : 총합일수에 월과 일의 날수를 더한다.
 
Step 6 : (총합일수%7)이 요일이 된다.
ex) 1%7=일요일
2%7=월요일
 
3] 프로그램 코드

import java.util.*;

class Assign2 {
public static void main(String[] args) {
int Total_Days = 1, sw = 0;
int year, month, days;

Scanner scan = new Scanner(System.in);
System.out.println("input year");
year = scan.nextInt();
System.out.println("input month");
month = scan.nextInt();
System.out.println("input days");
days = scan.nextInt(); // Step 2
switch (month) {
case 1:
Total_Days += 0;
break;
case 2:
Total_Days += 31;
break;
case 3:
Total_Days += 59;// 31+28;
break;
case 4:
Total_Days += 90;// 31+28+31;
break;
case 5:
Total_Days += 120;// 31+28+31+30;
break;
case 6:
Total_Days += 151;// 31+28+31+30+31;
break;
case 7:
Total_Days += 181;// 31+28+31+30+31+30;
break;
case 8:
Total_Days += 212;// 31+28+31+30+31+30+31;
break;
case 9:
Total_Days += 243;// 31+28+31+30+31+30+31+31;
break;
case 10:
Total_Days += 273;// 31+28+31+30+31+30+31+31+30;
break;
case 11:
Total_Days += 304;// 31+28+31+30+31+30+31+31+30+31;
break;
case 12:
Total_Days += 334;// 31+28+31+30+31+30+31+31+30+31+30;
break;
}
Total_Days += ((year - 1900) * 365) + ((year - 1900) / 4) + days;
// Step 3,5
if ((year - 1900) % 4 == 0 && (month == 1 || month == 2))
Total_Days -= 1;
// Step 4
System.out.println(Total_Days);
switch (Total_Days % 7) {
case 0:
System.out.println(year + "/" + month + "/" + days + " = " + "Saturday");
break;
case 1:
System.out.println(year + "/" + month + "/" + days + " = " + "Sunday");
break;
case 2:
System.out.println(year + "/" + month + "/" + days + " = " + "Monday");
break;
case 3:
System.out.println(year + "/" + month + "/" + days + " = " + "Tuesday");
break;
case 4:
System.out.println(year + "/" + month + "/" + days + " = " + "Wednesday");
break;
case 5:
System.out.println(year + "/" + month + "/" + days + " = " + "Thursday");
break;
case 6:
System.out.println(year + "/" + month + "/" + days + " = " + "Friday");
break;
// Step 6
}
}
}