2015년 7월 2일 목요일

Java study _day2 (교재: java200제)

Java Study day2
주제
011 기본 연산과 출력(print, printf)
 print는 출력할 때 +를 사용하고, printf는 %와 ,를 이용한다. 
- FiveOperation.java
package kr.co.infopub.chap011;
//5칙 연산을 확인한다.
public class FiveOperation {

public static void main(String[] args) {
int ia=20;
int ib=67;

double da=69.67;
double db=34; //int->double promotion 34.0
int iResultA=ia+ib;
int iResultB=ia-ib;
int iResultC=ia*ib;
int iResultD=ia/ib;  //몫
int iResultE=ia%ib;  //나머지 mod
System.out.println("1 : "+iResultA);
System.out.println("2 : "+iResultB);
System.out.println("3 : "+iResultC);
System.out.println("4 : "+iResultD);
System.out.println("5 : "+iResultE);
double dResultA=da/db; //(da/db)*db=da
double dResultB=da%db; //???
double dc=(da-db*((int)(da/db)));
//da%db=(da-db*((int)(da/db)))
System.out.println("6 : "+dResultA);
System.out.println("7 : "+dResultB);
System.out.println("8 : "+dc);
//짝수 ,홀수 
int even=4%2;
int odd=5%2;
System.out.println("9 : "+even);//2로 나누어 나머지 0
System.out.println("10: "+odd);//2로 나누어 나머지 1
}
}


cf) 자바에서 같다(equal)는 ==로 표시하며, = 은 대입이라는 점에 주의한다.
double 타입의 모드(%)는 int 타입 사이의 나머지와 다르다. a%b는 a=(a-b*((int)(a/b))) 이다.
- PrintTest.java
package kr.co.infopub.chap011;
import java.util.*;
public class  PrintfTest
{
public static void main(String[] args) 
{
int a=20;
long b=30000L;
float c=34.98F;
double d=234.234;
char e='k';
Calendar today = Calendar.getInstance();
System.out.println("1 : "+a+" "+b+" "+c+" "+d+" "+e);//불편하다.
System.out.printf("2 : \\ %%  %d  %d  %f  %f %c %n",a,b,c,d,e);
System.out.printf("3 : %1$d  %1$d  %2$c\n”,a,97);
//argument_index$conversion
System.out.printf("4 : %1$h %1$o %1$x\n",a);
System.out.printf("5 : %f %1$a %1$e %1$f %1$g\n", 65.8734543537);
System.out.printf("6 : Today %1$tm %1$te,%1$tY %n", today);
System.out.printf("7 : Today %1$tm %1$td,%1$ty %n", today);
System.out.printf("8 : Today %1$th %1$tI,%1$ta %n", today);
System.out.printf("9 :123456789012345678901234567890\n");
System.out.printf("10:%1$20f\n", 5678.3435453535);
System.out.printf("11:%1$20.10f\n", 5678.3435453535);
System.out.printf("12:%1$-20.10f\n", 5678.3435453535);
}
}
cf) 12번째 줄 - System.out.println에서 변수를 여러 개 출력하는 경우 스트링 컨케트네이션
이 발생한다. Java2까지는 +를 사용했으나 불편하여 Java5 부터는 printf 메서드가 제공된
다. 
이스케이프 문자 %%와 %n은 System.out.printf에서만 사용할 수 있다. 
\n 이나 %n은 다음 줄로 이동하라는 의미이다.

012 기본 타입 바르게 사용하기 (캐스팅, 변수 범위)
 기본 타입 간의 캐스팅과 프로모션을 이해하자. 
 CastingRangeMain.java 
package kr.co.infopub.chap012;
public class CatingRangeMain
{
public static void main(String[] args) 
{
char cc='ㄱ';//
System.out.println(cc);// char를 찍자
System.out.println((int)cc); // int로 바꾸어 찍자
cc='ㄴ';//
System.out.println(cc);// char를 찍자
System.out.println((int)cc); // int로 바꾸어 찍자
cc='ㄷ';//
System.out.println(cc);// char를 찍자
System.out.println((int)cc); // int로 바꾸어 찍자
//int d=cc;
//System.out.println(d);
//System.out.println((char)d);

System.out.println("---------------------------------");

for(int i=1;i<=100;i++){
System.out.print((char)i+" ");//찍고 공백 추가 그자리
// (char)i --> int를 char로 casting
if((i%10==0)){// 10으로 나누어 떨어지는 가?
System.out.println();//한칸을 내려라
}
}
}//
}
cf) 기본 타입은 캐스팅과 프로모션에 주의해야 한다. 그렇지 않으면 각 타입의 범위에 맞지 않
는 쓰레기값을 중요한 데이터로 생각하고 사용할 수도 있다. 기본 타입에서 정수 타입은 int, 
소수 타입은 double을 사용하면 오버플로우 발생이 크게 줄어든다. 정수 타입을 사용할 때 메
모리를 아끼려고 byte나 short를 사용한다면 헛수고를 한 셈이다. byte나 short를 변수로 쓰
면 int로 자동 프로모션되기 때문이다. 

- RangeMain.java
package kr.co.infopub.chap012;
public class RangeMain
{
public static void main(String[] args) 
{
{//시작 block D
int d=10;
{//시작 block C
int c=20;
{//시작 block B
int b=30;
{//시작 block A
int a=40; 
//a,b,c,d 모두 사용가능
a=200;
b=1000;
c=2000;
d=50;
System.out.println("1 : "+a+" "+b+" "+c+" "+d);
//System.out.printf("1 :%d  %d  %d  %d \n",a,b,c,d);
}// end A
b=200;
c=300;
d=60;
//b,c,d가 살수있다.
System.out.println("2 : "+b+" "+c+" "+d);
//System.out.printf("2: %d  %d  %d\n",b,c,d);
}// end B
c=300;
d=70;
//c,d가 살수있다.
System.out.println("3 : "+c+" "+d);
//System.out.printf("3: %d  %d\n",c,d);
}// end C
d=80; // d 만 살수있다.
System.out.println("4 : "+d);
//System.out.printf("4: %d\n",d);
}//// end D
}//main
}//class
013 메서드
  메서드(method)를 선언하는 방법과 사용하는 방법을 익힌다. 
- Coffee1Main.java
package kr.co.infopub.chap013;
public class Coffee1Main {

public static void main(String[] args) {
int myMoney = 800; //800원은 커피 몇잔일까?
int cups = 0;   //몇잔나올까 준비
if(myMoney > 0){
cups = myMoney/200; //커피 몇잔
}else if(myMoney==0){
cups=0;
}else{
cups=-1;
}
if(cups>0){
System.out.println("커피 "+cups+"잔 입니다.");
//System.out.printf("커피 %d잔 입니다.",cups);
}else{
System.out.println("액수가 모자랍니다.");
}
}
}
- Coffee2Main.java
package kr.co.infopub.chap013;
public class Coffee2Main {
//반복, 복잡함을 메서드로 만든다.
public static void main(String[] args) {
int myMoneyA = 800;  //800원은 커피 몇잔일까?
int cupsA = Coffee2Main.coffee(myMoneyA);
Coffee2Main.printCoffee(cupsA);
int myMoneyB = 150;  //150원은 커피 몇잔일까?
int cupsB = coffee(myMoneyB);
printCoffee(cupsB);
}//main
public static int coffee(int money){
int cups=0;   //몇잔나올까 준비
if(money > 0){
cups=money/200;
}else if(money==0){
cups=0;
}else{
cups=-1;
}
return cups;
}//coffee
public static void printCoffee(int cups){
if(cups>0){
System.out.println("커피 "+cups+"잔 입니다.");
//System.out.printf("커피 %d잔 입니다.",cups);
}else{
System.out.println("액수가 모자랍니다.");
}
}//printCoffee
}
cf) static 메서드로 선언했다. static으로 선언한 메서드는 반드시 ‘클래스명.메서드’ 형식으로 
호출해야 한다.
두 번 이상 같은 코드가 반복된다면 이를 메서드로 선언하고 사용하는 것이 프로그래밍의 기본
이다. 

014 메서드 아규먼트 
 메서드의 아규먼트(argument) 사용법을 익힌다. 
 Argument1Main 
package kr.co.infopub.chap014;
public class Argument1Main {
public static void main(String[] args) {
int myMoney=500;
int cups=coffee(myMoney,300);
printCoffee(cups);
int noChange=400;
coffeeIn(noChange);
System.out.print("main: ");
System.out.println("noChange는 "+noChange+"다.");
String sChange="hyonny";
coffeeIn(sChange);
System.out.print("main: ");
System.out.println("sChange는 "+sChange+"다.");
}//main

public static void coffeeIn(int money){
money+=300;//money=money+300;
money/=50;//money=money/50;
System.out.print("method coffeeIn: ");
System.out.println("money는 "+money+"원이다.");
//System.out.printf("money는 %d원이다.",money);
}//coffeeIn

public static void coffeeIn(String money){
money=money.replace('o','z');
money+="안녕";
System.out.print("method coffeeIn: ");
System.out.println("money는 "+money+"다.");
}//coffeeIn

public static int coffee(int money,int coffeeValue){
if(coffeeValue<=100){
return -1;
}
int cups=-1;   //몇잔나올까 준비
if(money > 0){
cups=money/coffeeValue;
}
return cups;
}//coffee
public static int coffee(int money){
return coffee(money,200);
}//coffee
public static void printCoffee(int cups){
if(cups>0){
System.out.println("커피 "+cups+"잔 입니다.");
//System.out.printf("커피 %d잔 입니다.",cups);
}else{
System.out.println("액수가 모자랍니다.");
}
}//printCoffee
}

015 기본 연산을 위한 메서드 
 5칙 연산 이외에 기본적으로 필요한 메서드를 익힌다.
 MathTest1Main.java
package kr.co.infopub.chap015;
public class MathTest1Main {

public static void main(String[] args) {
//constant
System.out.println("1 : Math.E "+Math.E);
System.out.println("2 : Math.PI "+Math.PI);
//method
System.out.println("3 : Math.abs(-5) 절대값:"+Math.abs(-5));
System.out.println("4 : Math.ceil(4.34) 올림:"+Math.ceil(4.34));
System.out.println("5 : Math.round(4.34) 반올림:"+Math.round(4.5));
System.out.println("6 : Math.floor(4.34) 버림:"+Math.floor(4.34));
System.out.println("7 : Math.rint(4.34) 반올림:"+Math.rint(4.51));
System.out.println("8 : Math.max(45,78) "+Math.max(45,78));
System.out.println("9 : Math.min(45,78) "+Math.min(45,78));
System.out.println("10: Math.pow(2,4) "+Math.pow(2,4));
System.out.println("11: Math.log(30) "+Math.log(30));
System.out.println("12: Math.exp(3) "+Math.exp(3));
System.out.println("13: Math.sqrt(10) "+Math.sqrt(10));
System.out.print("14: Math.sin(Math.toRadians(90)) ");
System.out.println(Math.sin(Math.toRadians(90)));
System.out.print("15: Math.cos(Math.toRadians(180)) ");
System.out.println(Math.cos(Math.toRadians(180)));
//random
double dRan=Math.random();//0<==dRan<1 실수
int    iRan=(int)(Math.random()*100);//0<==iRan<100 정수
System.out.println("16: Math.random()=> "+dRan);
System.out.println("17: (int)(Math.random()*100)=> "+iRan);
}
}
- MathTest2Main,java
package kr.co.infopub.chap015;
import static java.lang.Math.*;
public class MathTest2Main {

public static void main(String[] args) {
//추가 메서드
System.out.printf("1 : log10(100)  %-20.10f  %n",Math.log10(100));
System.out.printf("2 : sinh(3) %-20.10f  %n",sinh(3) );
System.out.printf("3 : 모드1 %-10.5f  %n",IEEEremainder(10.21,3.34));
System.out.printf("4 : 모드2 %-10.5f  %n",10.21%3.34);
System.out.printf("5 : 모드3 %-10.5f  %n",(10.21-3.34*((int)(10.21/ 3.34))));
//소수 원하는 곳에서 반올림하기
double d=10.34567;
System.out.printf("6 : 원하는 곳에서 반올림하기 %n");
System.out.printf("7 : 1 : %10.6f %10.6f %n",d,olimAtNums(d,1));
System.out.printf("7 : 2 : %10.6f %10.6f %n",d,olimAtNums(d,2));
System.out.printf("7 : 3 : %10.6f %10.6f %n",d,olimAtNums(d,3));
System.out.printf("7 : 4 : %10.6f %10.6f %n",d,olimAtNums(d,4));
System.out.printf("7 : 5 : %10.6f %10.6f %n",d,olimAtNums(d,5));
}

public static double olimAtNums(double d, int nums){
return ((int)((d*Math.pow(10,nums)+5)/10.0))/Math.pow(10,nums-1);
}//olimAtNums
}

016참조 타입 String
- StringTest1Mian
package kr.co.infopub.chap016;
public class StringTest1Main {

public static void main(String[] args) {
//String Concatenation
String sname="";
sname+="Antony ";
sname+="Sedas ";
sname+=6+"th";
//String Substring
System.out.println("1 :            01234567890123456789");
System.out.println("2 :Name      : "+sname);
sname=sname.substring(2);
System.out.println("3 :substring : "+sname);
sname=sname.substring(2,5);
System.out.println("4 :substring : "+sname);
//call by value
String sChange="hyonny%love";
System.out.print("5 :main: Befor : ");
System.out.println("Hot Live  : "+sChange);
changeIn(sChange);
System.out.print("7 :main: After : ");
System.out.println("Hot Live  : "+sChange);
System.out.print("8 : ,<>/%^&*+-=() 이 있다면 true : ");
System.out.println(hasDelemeter('<'));

}//main
//call by value test
public static void changeIn(String str){
str=str.replace('o','z');
str+="hello";
System.out.print("6 :method changeIn: ");
System.out.println("Heart "+str);
}//coffeeIn
//,<>/%^&*+-=() 문자가 있다면 true
public static boolean hasDelemeter(char c){
boolean hasD=false;
if(" ,<>/%^&*+-=()".indexOf(c)!=-1){
hasD=true;
}
return hasD;
}//분리문자
}

017  간단한 조건문 if~else
 IfTest1.java
package kr.co.infopub.chap017;
public class IfTest1 {

public static void main(String[] args) {
int year=2004;
if(year%2==0){
System.out.println(year+"는 짝수 해입니다.");
}else{
System.out.println(year+"는 홀수 해입니다.");
}//

if(year%2!=1){
System.out.println(year+"는 짝수 해입니다.");
}else{
System.out.println(year+"는 홀수 해입니다.");
}//

if( ( (year % 4)==0   &&  (year % 100)!=0 ) 
    ||  (year % 400==0)){
System.out.println(year+"는 윤년입니다.");
}else{
System.out.println(year+"는 윤년이 아닙니다.");
}
}
}
- If3HangTest.java
package kr.co.infopub.chap017;
public class If3hangTest{

public static void main(String[] args) {
int year=2004;

String sEven= ( (year%2==0) ? "짝수 해" : "홀수해" );
System.out.printf("%d는 %s입니다. %n",
    year,( (year%2==0) ? "짝수 해" : "홀수해" ));
System.out.printf("%d는 %s입니다. %n",year,sEven);
/*
System.out.println(year+"는 "+sEven+"입니다.");
System.out.println(year+"는 "+
( (year%2==0) ? "짝수 해" : "홀수해" )+"입니다.");
*/

}
}

018 간단한 순환문 for 
 ForTest1Main
package kr.co.infopub.chap018;
public class  ForTest1Main
{
public static void main(String[] args) 
{
for(int j=40;j<50;j++){
System.out.print(j+" ");
//System.out.printf("%d ",j);
}
System.out.println();//한 줄 이동
//System.out.printf("%n");
int i=0; //i의 범위??
for(; i<9;i++){
System.out.print(i+" ");
}
System.out.println("\ni의 값은 :"+i);
}
}
- ForTest2Main.java
package kr.co.infopub.chap018;
public class  ForTest2Main
{
public static void main(String[] args) 
{
int i=0;  // i의 범위는 여기서
for(   ;   ;   ){
System.out.print(i+"=>");
i++;
if(i==10){ break;}
}
System.out.println();
for(int j=0;j<10;j++){
System.out.print(j+"<=");
}
System.out.println();


System.out.println("  아직 i를 사용할 수 있지    i= "+i);

for(int k=0,m=1;k<4 ||  m<2;k++,m++){ 
System.out.println(k+"  <===k    m===> "+m);
}
//i는 여기까지
}
}
- ForTest3Main.java
package kr.co.infopub.chap018;
public class  ForTest3Main
{
public static void main(String[] args) 
{
for( int i=0; i<10;i++){
if(i%2==0){
continue;
}
System.out.print(" [ "+i+" ] ");
//System.out.printf(" [ %d ] ",i);
}
System.out.println();
int j=17;
for(  ;   ; j+=2){
System.out.print(" [ "+j+" ] ");
//System.out.printf(" { %d  } ",j);
if(j>30){ 
break; 
}
}
System.out.println("\nfor문 결과  :  "+j);
//System.out.printf("%nfor문 결과  :  %d%n",j);
}
}
- ForTest4Main.java
package kr.co.infopub.chap018;
public class  ForTest4Main
{
public static void main(String[] args) 
{
//등비수열   An+1=r*An
for( int i=1; i<20;i*=2){
System.out.print(i+"  ");
}
System.out.println();
//등차수열   An+1= An+ d
for( int i=250; i>0;i-=50){
System.out.print(i+"  ");
}
System.out.println();
//An+1=3*An - 2 , A1=2
for( int i=2; i<500;i=3*i-2){
System.out.print(i+"  ");
}
System.out.println();
}
}

019 문자열 바꾸기 
 StringApiMain.java
package kr.co.infopub.chap019;
public class StringAPIMain {

public static void main(String[] args) {
String strApiTest="Hello! Nice to meet you.";
strApiTest+="\nThank you very much."; 

//System.out.println("1 : "+strApiTest);
System.out.printf("1 : %s%n",strApiTest);
System.out.printf("2 : %s%n",strApiTest.replace('o','z'));
System.out.printf("3 : %s%n",strApiTest);
strApiTest=strApiTest.replace('o','h');
System.out.printf("4 : %s%n",strApiTest);
strApiTest=strApiTest.substring(4);
System.out.printf("5 : %s%n",strApiTest);
strApiTest=strApiTest.toUpperCase();
System.out.printf("6 : %s%n",strApiTest);
}//main
}

020 JDK에서 제공하는 예제 살펴보기
Hello4Applet.java
package kr.co.infopub.chap020;
import javax.swing.*;
import java.awt.*;
public class Hello4Applet extends JApplet{
private static final long serialVersionUID=122454214237L;//JAVA5
public void init() {
}
public void start() {
}
public void paint(Graphics g){
super.paint(g);//습관적으로 쓰자.
g.drawString("안녕하세요!! JAVA를 즐깁시다.",50,50);
}
}







댓글 없음:

댓글 쓰기