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);
}
}
댓글 없음:
댓글 쓰기