2015년 7월 5일 일요일

Java study _day3 (교재: java200제)

JavaStudy day3
주제
021 데이터 타입과 메서드 
 기본 타입과 참조 타입의 String을 이용해서 사용자가 정의한 클래스를 만들어 본다. 
 자바 프로그래밍의 기본은 클래스이다. 클래스 정의는 class 키워드를 사용하다. 
Student.java (***)
Public class Student {
//member field
private int id = 100;
private String name = “홍길동”;
//member field 
public int getId() {
return name;
}
public String getName() {
return name;
}
public void setId(int i) {
id = i;
}
public void setName(String string) {
name = string;
}
}

- TypeNMethodMain.java (***)
package kr.co.infopub.chap021;

import kr.co.infopub.chap024.Student;

public class TypeNMethodMain {

public static void main(String[] args) {
//primitive type
int myId=1001;
int yourID=1002;
//Reference type -- Predefined
String myName="hyonny";
String yourName=new String("Gagamel");
//Reference type -- Userdefined
Student stu=new Student();
stu.setId(yourID);
stu.setName(yourName);
//method calling
printInfor(myId,myName);
printInfor(stu);
}
public static void printInfor(int id, String name){
// System.out.println("ID는 "+id+", 이름은 "+name+"이다.");
System.out.printf("ID는 %d, 이름은 %s이다.%n",id,name);
}
public static void printInfor(Student st){
// System.out.println("ID는 "+st.getId()+
//                               ", 이름은 "+st.getName()+"이다.");
System.out.printf("ID는 %d, 이름은 %s이다.%n",
                              st.getId(),st.getName());
}
}
cf) 9번째 줄 - String은 참조 타입이므로  new 키워드를 이용하여 초기화시킨다. 참조 타입 
중 String과 Array는 new 키워드를 사용하지 않고도 객체를 생성할 수 있다. 객체 (instance, object) 생성에 대한 내용은 섹션 82 참고. 
11번째 줄 - String, Object, Integer, Double은 API가 제공하는 클래스이다. 이런 클래스를 ‘이미 정의된 참조 타입’ 이라고 한다. Student.java의 Student 클래스와 같이 새롭게 정의한 클래스는 ‘사용자가 정의한 참조 타입’ 이라고 한다. 

022 진수(2,8,10) 이해하기 
 10진수 123을 2진수로 바꾸는 메서드를 만들면서 진수를 이해한다. 
 DecimalScaleMain.java(**)
package kr.co.infopub.chap022;
public class DecimalScaleMain {
public static void main(String[] args) {
int deciNUm=123;//Integer.MAX_VALUE;
//System.out.println(Integer.toBinaryString(deciNUm));
System.out.print("1: ");
for(int i=0;i<32;i++){
System.out.print((int)(deciNUm/Math.pow(2,31-i)));
deciNUm=(int)(deciNUm%Math.pow(2,31-i));
}
System.out.println(); 
System.out.println("2: "+toBinal(123));//2진수  
System.out.println("3: "+0173);//8진수  
System.out.println("4: "+toOctal(123));//8진수
System.out.println("5: "+0x7b);//0x7B 16진수

}
public static String toBinal(int num){
int temp=num;
String sToOct="";//String 초기화
for(int i=0;i<32;i++){
sToOct=(temp%2)+sToOct;
temp=temp/2;
}
return sToOct;
}
public static String toOctal(int num){
int temp=num;
String sToOct="";//String 초기화
for(int i=0;i<32/3;i++){
sToOct=(temp%8)+sToOct;
temp=temp/8;
}
return sToOct;
}
}

023 10진수를 다른 진수로 나탄내기(API) 
 API에서 제공하는 메서드를 이용하여 10진수를 2,8,16진수로 바꾼다.
- DeciToBinMain.java(*)
package kr.co.infopub.chap023;
import static java.lang.Integer.*;
import static java.lang.Double.*;
public class DeciToBinMain
{
public static void main(String[] args) 
{
int a=69;
//Integer.Integer
System.out.println("1 : 69 to 2진법: "+Integer.toBinaryString(a));
System.out.println("2 : 69 to 2진법: "+(Integer.toBinaryString(-a)));

        //Integer.toOctalString(int i) 
System.out.println("3 : 69 to 8진법: "+(Integer.toOctalString(a)));
System.out.println("4 : 69 to 8진법: "+(Integer.toOctalString(-a)));

//Integer.toHexString(int i) 
System.out.println("5 : 69 to 16진법: "+(Integer.toHexString(a)));
System.out.println("6 : 69 to 16진법: "+(Integer.toHexString(-a)));

//Double.toHexString(double i) 
System.out.println("7 : 65.65 to 16진법: "+(Double.toHexString(65.65)));
System.out.println("8 : 65.65 to 16진법: "+(Double.toHexString(- 65.65)));
//JAVA5
Integer ide=Integer.decode("1");
System.out.println("9 : "+ide.intValue());
System.out.println("10: 69 reverse   "+Integer.reverseBytes(a));
System.out.printf("                 01234567890123456789012345678901%n");
System.out.printf("11:binary      : %s%n",(toBinaryString(a)));
System.out.printf("12:reverse     : %s%n",toBinaryString(reverseBytes(a)));
System.out.printf("13:left rotate : %s%n",toBinaryString(rotateLeft(a,3)));
System.out.printf("14:right rotate: %s%n",
                                      toBinaryString(rotateRight(a,3)));
}
}
cf)포장 클래스(wrapper class)는 특정 기본형 타입을 나타낸다. 예를 들어 Integer 클래스는 간단한 정수 값을 나타낸다.
Integer 클래스로부터 생성된 객체는 하나의 int 값을 저장할 수 있다. Wrapper class의 구성자는 저장할 기본형 타입 값을 받는다.
Integer age = new Integer(30);
Double avg = new  Double("3.145");
Integer 선언으로 객체가 선언되면 age 객체는 정수 30을 객체로 나타내며 기본형 타입이 아닌 객체가 필요한 곳에 사용될 수 있다.

-  DeciToBin2Main.java(**)
package kr.co.infopub.chap023;
import static java.lang.Integer.*;
import static java.lang.Double.*;
public class DeciToBin2Main
{
public static void main(String[] args) 
{

int a=123;
String lineNum="01234567890123456789012345678901";
System.out.printf("                 %s%n",lineNum);
System.out.printf("123 toBinary   : %s%n",toBinaryString(a));
for(int i=0;i<33;i++){
System.out.printf("%2d:right rotate: %s%n",i,
                  toBinaryString(rotateRight(a,i)));
}
for(int i=0;i<33;i++){
System.out.printf("%2d:left  rotate: %s%n",i,
                  toBinaryString(rotateLeft(a,i)));
}
System.out.printf("%s%n",lineNum);
System.out.printf("%s%n%s %n",toBinaryString(a),toBinaryString(reverseBytes(a)));
}
}

024 대입 연산자(=)와 박싱/언박싱
 기본 타입은 기본 타입끼리, 참조 타입은 참조 타입끼리 캐스팅 프로모션이 발생한다. 
 AssignMain.java(***)
package kr.co.infopub.chap024;
public class  AssignMain
{
public static void main(String[] args) 
{
int intNm1=123;
long longNum1=345L;
double doubleNum=123.123;
Integer intWrap1=new Integer(187);
Long    longWrap1=new Long(876);
Double  doubleWrap1=new Double(365);
String str="Hello JAVA7";          //predefined
String newStr=new String("Hello"); //predefined
Object  obj=new Object();          //predefined
Student stu=new Student();       //user-defined

doubleNum=longNum1;       //primitive promotion
intNm1=(int)doubleNum;      //primitive casting
longNum1=longWrap1.longValue();  //pri<-->wrap
//longWrap1=intWrap1; //reference type mismatch 
obj=longWrap1;        //상속관계(계층) promotion
longWrap1=(Long)obj;  //상속관계(계층) casting
System.out.println(longWrap1.longValue());
obj=stu;             //상속관계(계층) promotion
stu=(Student)obj;    //상속관계(계층) casting
System.out.println(stu.getName());
//str=stu;           //reference type mismatch 
}
}

cf) Promotion (묵시적 형 변환)
작은 데이터 타입에서 큰 데이터 타입으로 형변환 되는 것
자동 형변환

Casting(명시적 형 변환)
큰 데이터 타입에서 작은 데이터 타입으로 형변환 되는 것
명시적 형변환
단, boolean 자료형은 형변환이 불가능하다.

- EasyBoxingMain.java (***)
package kr.co.infopub.chap024;
public class  EasyBoxingMain
{
public static void main(String[] args) 
{
//Boxing/Unboxing은 JAVA5부터 ~
int intNm1=123;
long longNum1=345L;
double doubleNum=123.123;
Integer intWrap1=new Integer(187);
Long    longWrap1=new Long(876);
Double  doubleWrap1=new Double(365);

Object  obj=new Object();          //predefined
Integer intWrap2=intNm1;  //Boxing
intNm1=(int)intWrap2;     //UnBoxing

obj=longWrap1;        //상속관계(계층) promotion
longWrap1=(Long)obj;  //상속관계(계층) casting
obj=intNm1;       //Boxing-->obj=new new Integer(intNm1);
intNm1=(Integer)obj;  //UnBoxing-->((Integer)obj).intValue();
System.out.println(intNm1);
}
}

cf) - Boxing : 기본 자료형을 Wrapper 클래스의 객체로 변경하는 과정
ex) Integer age = new Integer(30);
- Unboxing : 각각의 객체를 기본 자료형으로 변경하여 사용하는 과정
ex) int age2 = age.intValue();

026 증감 연산자(++,——)
 ++a, a++의 차이점을 이해하고 연산자 간의 우선 순위를 확보한다.
- IncreasingMain.java(*)
package kr.co.infopub.chap025;
public class IncreasingMain {

  public static void main(String[] args) {
  for(int i=0;i<9 ;i++){
  System.out.print(i+" ");
  }
  System.out.println();
 
  for(int i=8;i>-1;i--){
  System.out.print(i+" ");
  }
  System.out.println();
 
  int num=0;
  num=num+1;  //1
  num+=1;     //2
  System.out.println("1 : "+num++);  //2++
  System.out.println("2 : "+(++num));  //++3
  num+=++num;  //num=num+(++num);4+(++4)
  System.out.println("3 : "+num);  
  num=num+++(+num);//에러--> num=num++++num;9+++(+9)
  System.out.println("4 : "+num);  
  num=num---num;//num=num-(--num) 9-(--9)
  System.out.println("5 : "+num);  
  num=num---(-num);//에러-->num=num----num;1---(-1)
  System.out.println("6 : "+num); 
  num=num++ + ++num;//에러-->num=num++++++num;
  System.out.println("7 : "+num);
  num=num-- - --num;//에러-->num=num++++++num;
  System.out.println("8 : "+num);
  }
}
027 관계 연산자 (<,>,==,!=,<=,>=)
 %, ==, != 을 사용하여 배수를 구한다. 
- RelationOperatorMain.java (*)
package kr.co.infopub.chap026;
public class RelationOperatorMain {

public static void main(String[] args) {
int i=0;
for(i=5; i<9;i++){
System.out.println(i+" ");
}
// i=9;
if(i>8){
System.out.println(i+" larger than 8");
}else{
System.out.println(i+" same to 8 or lesser than 8");
}

//3의 배수
for(int j=30; j>=1;j--){
if(j%3==0){
System.out.print("["+j+"] ");
//System.out.printf("[%d] ",j);
}
}
System.out.println();
//3의 배수 중 2의 배수 제외
for(int j=1; j<=30;j++){
if( j%3==0 && j%2!=0 ){
System.out.print("["+j+"] ");
//System.out.printf("[%d] ",j);
}
}
System.out.println();
}
}

028 논리 연산자(||, &&, !)
 %, &&, ||을 이용하여 1의 자리수를 판별한다.
- LogicOperatorMain.java (*)
package kr.co.infopub.chap027;
public class LogicalOperatorMain {

public static void main(String[] args) {
  //1의 자리가 3이나 6이나 9인 것.
  for(int i=0; i<50; i++){
  if(((i%10)%3==0) && (i%10!=0)){
  System.out.print("["+i+"] ");
  }
  }
  System.out.println();
  //1의 자리가 3, 6, 9가 아닌 것.
  for(int i=0; i<50; i++){
  if(!(((i%10)%3==0) && (i%10!=0))){
  System.out.print("["+i+"] ");
  }
  if((i+1)%10==0){
  System.out.println();
  }
  }
  System.out.println();
  for(int i=0; i<50; i++){
  if(((i%10)%3!=0) || (i%10==0)){
  System.out.print("["+i+"] ");
  }
  if((i+1)%10==0){
  System.out.println();
  }
  }
 
  System.out.println();
  //3의 배수 중 2의 배수 제외
  for(int j=1, k=30; (k>=10 && j<=30);j++, k--){
  if( j%3==0 && j%2!=0 ){
  System.out.print("["+k+","+j+"] ");
  //System.out.printf("[%d,%d] ",k,j);
  }
  }
  System.out.println();
 
  for(int j=1, k=30; (k>=10 && j<=30);j++, k--){
  if( j%3==0 && j%2!=0 ){
  System.out.print("["+k+","+j+"] ");
  //System.out.printf("[%d,%d] ",k,j);
  }
  }
  System.out.println();
}
}

- LogicCircuitTest.java (**)
package kr.co.infopub.chap027;
public class LogicCalculTest
{
public static void main(String[] args) 
{
boolean boa1=true;
boolean boa2=false;

System.out.println("                P|Q  P&Q  P^Q   !P");
System.out.print("1: ["+boa1+","+boa1+"]="+(boa1|boa1)+
  " "+(boa1&boa1)+" "+(boa1^boa1)+" "+(!boa1)+"\n");
System.out.print("2: ["+boa1+","+boa2+"]="+(boa1|boa2)+
  " "+(boa1&boa2)+" "+(boa1^boa2)+" "+"\n");
System.out.print("3: ["+boa2+","+boa1+"]="+(boa2|boa1)+
  " "+(boa2&boa1)+" "+(boa2^boa1)+" "+"\n");
System.out.print("4: ["+boa2+","+boa2+"]="+(boa2|boa2)+
  " "+(boa2&boa2)+" "+(boa2^boa2)+" "+(!boa2)+"\n");
//System.out.printf("1: [%b,%b]= %b %b %b %b %n",
// boa1,boa1,(boa1|boa1),(boa1&boa1),(boa1^boa1),(!boa1));
//System.out.printf("2: [%b,%b]= %b %b %b %n",
// boa1,boa2,(boa1|boa2),(boa1&boa2),(boa1^boa2));
}
}

- CircuitTest.java(*)
package kr.co.infopub.chap027;
public class CircuitTest
{
public static void main(String[] args) 
{
int ca=10;
int temp=23;
String say="hello";

if((temp>ca)|((say="y")=="hello")){
System.out.println("1: | "+say);
}
if((temp>ca)||((say="l")=="hello")){
System.out.println("2:|| "+say);
}
if((temp<ca)&((say="s")=="hello")){
System.out.println("3: & "+say);
}else{
System.out.println("3:& else: "+say);
}
if((temp<ca)&&((say="t")=="hello")){
System.out.println("4: & "+say);
}else{
System.out.println("4:& else: "+say);
}
}
}

029 삼항 연산자(? :) (***)
 if ~ else 대신 ? :를 이용하여 윤년을 구별하자. 연산자의 우선순위를 이해한다. 
- TriOperatorMain.java
package kr.co.infopub.chap029;
public class TriOperatorMain {

public static void main(String[] args) {
for(int year=1998;year<2006;year++){
//Section 5
boolean yearTF=((0 == (year % 4) && 0 != (year %100))
              || (0 == year%400)) ? true : false ;
if(yearTF){
System.out.println(year+"는 윤년입니다. ");
}else{
System.out.println(year+"는 윤년이 아닙니다.");
}
}//for end
//10진수를 2진수로 바꾸기
String s="";
int numS=-123;
int numT=numS;
int count=1;
for(int i=0;i<=31;i++){
int aa=numS%2;
s=(aa>=0)? aa+s : (-aa)+s;  //삼항연산자
numS/=2;//절대값을 이진수로
}
System.out.println(numT+" toBinary: "+s);
}
}

- OperatorNumbering.java (**)
package kr.co.infopub.chap029;
public class  OperatorNumbering
{
public static void main(String[] args) 
{
int x=10;
int y=20;
int year=2004;
boolean zYear=year%4==0&&year%100!=0||year%400==0?true:false;
System.out.println(4+5>>3);
System.out.println(4*-5<<3);
System.out.println(++x - --y>>3);
System.out.println(4*-5<<3);
System.out.println(4*5&7|3);
System.out.println(4*5|7&3);
System.out.println(y=x>20?45>>3+2*2-3:3%2);
System.out.println(year+" 윤년? =>"+zYear);
}
}

030 단출 대입 연산자 (+=, —=, /=, *=, %=, …)
 삼항 연산자(? :, 조건 연산자)와 >>=1(단축 대입 연산자)을 활용한다.
- BitNShiftMain.java (**)
package kr.co.infopub.chap030;
import static java.lang.Integer.toBinaryString;
public class BitNShiftMain {

public static void main(String[] args) {
int intNums1=123;
int intNums2=-123;
//System.out.println(intNums1+" : "+shifts(intNums1));
//System.out.println(intNums1+" : "+Integer.toBinaryString(intNums1));
System.out.printf("%d  : %s%n",intNums1,shifts(intNums1));
System.out.printf("%d  : %s%n",intNums1,toBinaryString(intNums1));
//System.out.println(intNums2+": "+shifts(intNums2));
System.out.printf("%d : %s%n",intNums2,shifts(intNums2));
System.out.printf("%d : %s%n",intNums2,toBinaryString(intNums2));
System.out.println(("").hashCode());
}
//10진법수를 2진수 스트링으로 변환
public static String shifts(int a){
String s="";
int count=1;
for(int i=0;i<=31;i++){
int aa=a%2;
s=(aa>=0)? aa+s : (-aa)+s;
a>>=1;//a/=2;
}
return s;
}
}
- BitNShiftMain2.java (**)
package kr.co.infopub.chap030;
public class BitNShiftMain2 {

  public static void main(String[] args) {
int intNum1=123;
int intNum2=-123;
String s="11111111111111111111111110000101";
System.out.println(binTo10("1111011"));
System.out.println(binTo10(s));
  }

  //2진법 스트링을 10진법으로 바꾸기 (정해진 위치)
  private static int frBiTo10(String str,int a){
  int temp=1;
  int afterParse=Integer.parseInt(str);
  temp=a>=1?afterParse<<a:afterParse>>(-a);
  //temp=(a>=1?afterParse<<a:afterParse>>(-a));
  /*
  if(a>=1){
  temp= afterParse<<a;
  }else{
  temp= afterParse>>(-a);
  }*/
  return temp;
  }
  //2진법으로 되어 있는 수를 10진법수로
  public static int binTo10(String str){
  int nums=0;
  int count=str.length();
  for(int i=0;i<count;i++){
  nums+=frBiTo10(str.charAt(count-1-i)+"",i);
  }
  return nums;
  }
}












댓글 없음:

댓글 쓰기