Java_04 Java 2011. 10. 27. 18:20

* 전일 연산자 복습 : 관계연산자 유의할 부분 (자주 사용될만한 문구인진 모르겠지만..)
while (n++<10){
s+=n;
}System.out.printf(n+", "+s);
에서 n값을 10과 비교를 먼저 하고 값을 1증가한다.
n값이 10이 되어도 비교하고 값 1증가 후 빠져나와 n의 출력값은 11이 된다.
- 반복횟수가 명확하지 않을 땐 while문이 일반적이다.

* switch ~ case 문
- switch문으로 작성하는 모든 것은 if로 구현이 가능하다.
- 다중선택문 이라고도 하며 switch(수식)의 수식값에 따라 case의 상수값에 해당되는
  문장을 실행한다.
- break; 로 멈춰주지 않으면 switch문의 case가 끝날 때 까지 계속 실행 된다.
- case에 swith문의 수식을 만족하는 값이 없을 경우 default 내의 문장을 실행한다.
  (default값은 불필요시 빼도 관계 없고 위치 또한 각 문장끝 break; 가 기재되어 있다면 위치도 상관 없다)
- switch(n) : n에는 수식과 숫자, 문자 입력 가능
- case n : n에는 숫자, 문자 입력 가능(문자열은 입력할 수 없다)


- 예제: break문의 활용

  1. public class Test1
  2. {   public static void main(String[] args){
  3.     int a=3;
  4.     a=5;
  5.     switch(a){
  6.         case 3 : System.out.print("***");
  7.         break;
  8.         //break가 없을 때 break가 나오거나 switch문이 끝날 때 까지 계속 실행됨.
  9.         default:System.out.print("1~3이외의 수"); //default 위치는 어디에 있건 상관 없다.
  10.         break;   
  11.         case 2 : System.out.print("**");
  12.         break;
  13.         case 1 : System.out.print("*");
  14.         break;
  15.  
  16.     }System.out.println();

- 결과





- 예제 : 점수를 입력받아 학점 출력하기

  1. import java.io.IOException;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4.  
  5. public class Test2{
  6.     public static void main(String[] args)throws
  7.         IOException{
  8.             BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  9.         int score;
  10.         char pan;
  11.  
  12.         System.out.print("점수? ");
  13.         score=Integer.parseInt(br.readLine());
  14.  
  15.         if (score>=0 && score<=100){ // 점수 범위 설정하려 한것..
  16.             switch(score/10){ // 점수를 10으로 나눈 몫, switch(조건식)가능
  17.             //조건식 없이 그냥 score쓰고 100,99,98.. 하려 했다니.. 잠이 덜깼나..
  18.                 case 10:
  19.                 case 9: pan='A'; break;
  20.                 case 8: pan='B'; break;
  21.                 case 7: pan='C'; break;
  22.                 case 6: pan='D'; break;
  23.                 default: pan='F';        
  24.             }
  25.             System.out.printf("%d : %c ",score,pan);
  26.         }
  27.     }
  28. }

- 결과






* do while 문
- 형식
: do{}안의 실행문을 선실행 1회 후 while(조건식)의 조건식을 나중에 비교하여 반복여부를 결정
do {
       // 실행문;
} while(조건식);

- 예제 : 1~10까지의 합 구하기 / while문의 실행순서 / do while문의 실행순서

  1. public class Test3
  2. {   public static void main(String[] args){
  3.         int s=0, n=0;
  4.        
  5.         do{
  6.         n++;
  7.         s+=n;
  8.         }while (n<10);
  9.         System.out.println("결과 : "+s);
  10.        
  11.         n=10;
  12.         while (n<10){ // 조건을 만족하지 않으면 한번도 실행되지 않는다.
  13.             n++;
  14.         }
  15.         System.out.println("while n: "+n);
  16.  
  17.         n=10;
  18.         do { // 적어도 한번은 실행한다.
  19.             n++;
  20.         }while(n<10);
  21.         System.out.println("do~while n: "+n);
  22. }   
  23. }

- 결과






- 예제 : 한 수를 입력하여 1부터 그 수까지의 합을 구하라는연예인

  1. import java.io.IOException;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4.  
  5. public class Test4
  6. {   public static void main(String[] args)throws
  7.  
  8.         int num, s, n;
  9.         // 수 입력 받기
  10.         do
  11.         {System.out.print("수? ");
  12.         num=Integer.parseInt(br.readLine());
  13.         }
  14.         while (num<1 || num>100); // 범위를 벗어났을 때 → do{@_@}의 @_@ 실행
  15.         // 반복횟수가 명확하지 않을땐 while을, 명확할땐 for문을 주로 쓴다.
  16.    
  17.         // 합 구하기
  18.         s=0; n=0;
  19.         while(n<num){
  20.             n++;
  21.             s+=n;
  22.         }
  23.         System.out.printf("1~%d까지의 합 %d ", num,s);
  24.     }
  25. }

- 결과






* for 문

- 반복횟수가 정해진 반복문일 경우 유용하게 사용된다.(수학적 계산에 유리)

- 형식
for (n=1; n<=100; n++){
       s+=n;
     }
for (초기값; 조건값; 증감값)

- 예제 : 초기값과 증감값에는 콤마(,)로 구분하여 두개의 값이 입력이 가능하나 일반적이지 않다.

  1. int n,s;
  2. // 아래의 형식이 아닌경우 for다음에 ;이 붙으면 결과가 나오지
  3. // 않으므로 주의해야 함
  4. for (n=1,s=0; n<10; s+=n,n++); // 조건식에만 ,이 들어가지 못한다
  5. System.out.println("합 : "+s); // 이형식은 권장하지 않음..그냥 알아두라고



- 예제 : for문 안에서 선언된 변수는 외부에서 사용불가하다.

  1. int s=0;
  2. for(int n=1; n<=100; n++){ // for문 안에서도 초기값으로 변수값 형선언 가능
  3.     s+=n;
  4. }
  5. // System.out.println("n:"+n+",합 : "+s); // 오류
  6. // for에서 선언된 변수는 외부에서 사용불가!!
  7. // for 안에서만 사용 가능
  8. System.out.println("합 : "+s);


- 예제 : for문 안에서 선언된 변수의 초기값이 반복문의 조건에 항상 참일 때 무한루프에 빠진다. 

  1. int i,j;
  2. for(i=1; i<=5; i++){
  3.     // i=3; // 무한루프∞에 빠짐
  4.     for(j=1; j<=4; j++){
  5.         System.out.println("*");
  6.     }
  7. }
  8. System.out.println(i);


- 예제 : * 로 삼각형 모양 만들기.

  1. int i,j;
  2. for(i=1; i<=5; i++){
  3.     for(j=1; j<=5-i; j++){
  4.         System.out.print(" ");
  5.     }
  6.     for(j=1; j<=i*2-1; j++){ // j<=i 일때 오른쪽이 직선, *이 삼각형 모양으로 되기 위해
  7.         // 1, 3, 5, 7, 9.. 식으로 가려면 i값은 1,2,3,4,5.. 식이므로 1,3,5,7,9..가 되기 위한
  8.         // 조건식을 찾으라는 말, 1*2-1=1, 2*2-1=3....
  9.         System.out.print("*");
  10.     }
  11.     System.out.println();
  12. }

- 결과



- 예제 : 역삼각형 만들기

  1. int i,j;
  2. for(i=5; i>=1; i--){
  3.     for(j=1; j<=5-i; j++){
  4.         System.out.print(" ");
  5.         }
  6.     for(j=1; j<=i*2-1; j++){ //
  7.         System.out.print("*");
  8.     }
  9.     System.out.println();   
  10. }


- 예제 : while문 for문 if문 활용

  1. import java.io.*;
  2.  
  3. public class Test7{
  4.     public static void main(String[] args)throws
  5.  
  6.         int num, s;
  7.         char ch;
  8.  
  9.         while(true){ // 무한루프
  10.             do{
  11.                 System.out.print("원하는 수? ");
  12.                 num=Integer.parseInt(br.readLine());
  13.             }while(num<1 || num>1000);
  14.            
  15.             // 1에서 입력받은 수까지의 합을 구한다.
  16.             s=0;
  17.             for(int i=1; i<=num; i++)
  18.                 s+=i;
  19.             System.out.printf("1~%d 합 : %d ",num,s);
  20.  
  21.             // 합을 계속 구할지 물어본다.
  22.             System.out.print("계속 하시겠습니까?[Y/N] ");
  23.             ch=(char)System.in.read();
  24.             System.in.skip(2); // 엔터를 버림
  25.  
  26.             if(ch!='y' && ch!='Y')
  27.                 break; // while(true) 문을 빠져나간다.
  28.         }
  29.     }
  30. }

- 결과






* break : 속해있는 brace(중괄호)의 while, do~while, for, switch 문을 빠져나감

* continue : 속해있는 brace의 while, do~while, for 문을 빠져나감

* 네이블

  1. int a=0,b=0;
  2.  
  3.     jump: // 네이블이름은 엿장수 마음대로
  4.     while(true){
  5.         a++;
  6.         b=0;
  7.         while(b<3){
  8.             if(a>3)
  9.                 break jump; // 네이블 밑에 있는 문장을 빠져나가라
  10.             b++;
  11.             System.out.println(b);
  12.         }
  13.     } // while(ture)_end



* 문제1) : 1*2*3*....*10의 결과 구하기

  1. public class Test9{
  2.     public static void main(String[] args){
  3.    
  4.     int i=0,n=1,a=0;
  5.  
  6.     for (i=1; i<=10; i++)
  7.     {
  8.         n*=i;   
  9.     }
  10.     System.out.print(n);
  11.     }
  12. }


(소스 보고 공부하기..)

* 문제2) : 어떤 수를 입력받아 그 수가 소수인지 판별하기
소수 : 자기자신으로만 나누어지는 수(단, 1은 소수가 아님)

(소스 보고 공부하기..)

* 문제3) : 두 수를 입력 받은 후 작은수에서 큰수까지의 합 구하기

(소스 보고 공부하기..)

* 문제4) : 정수를 입력받아 입력받은 정수의 자릿수 구하기

(소스 보고..)

* 문제 5) 1~100까지 수중 3,6,9가 들어있는 수는 *를 출력하고
그렇지 않으면 수를 출력한다. 단 한줄에 10개씩 출력

(소스 보고..)

* 문제 6) 구구단을 다음과 같이 출력한다.
2*1=2 3*1=3 4*1=4 5*1=5
2*2=4 3*2=6 4*2=8 5*2=10
    :
2*9=18 3*9=27 4*9=36 5*9=45

6*1=6 7*1=7 8*1=8 9*1=9
  :

(소스 보고..)


* 과제) 자판기 만들기

(공부)

 

 

 

 

 

 

 


 

'Java' 카테고리의 다른 글

Java_06  (0) 2011.10.31
Java_05  (0) 2011.10.29
Java_04  (0) 2011.10.27
Java_03  (0) 2011.10.26
Java_02  (0) 2011.10.25
Java_01  (0) 2011.10.24
Html,Jsp,Css_06 Html/Jsp/Javascript 2011. 10. 17. 19:20

* 중첩 for문(반복문내에 또다른 반복문이 존재)의 사용-1

# 출력형식
  1 2 3 4 5
  1 2 3 4 5
  1 2 3 4 5
  1 2 3 4 5
  1 2 3 4 5


<script>
 for (i=1; i<=5; i++) // 행지정시 사용됨이 일반적
 {
  for (j=1; j<=5; j++) // 열지정시 사용됨이 일반적
  {
   document.write(j+"&nbsp;"); // j를 i로 바꾸면 결과가 달라지는 규칙을 보며 이해한다.
   }
  document.write("<br>");
 }
</script>

* 중첩 for문의 사용-2

# 출력형식
  1 2 3 4 5
  1 2 3 4 5
  1 2 3 4 5
  1 2 3 4 5
  1 2 3 4 5


<script>
 for (i=1; i<=5; i++)
 {
  for (j=1; j<=5; j++)
  {
   document.write("<img src=../html/img/blog_img.gif>"); 
 // 위의 예제와 같지만 이미지를 로딩한 경우  
  }
  document.write("<br>");
 }
</script>

* 중첩 for문의 사용 -3 

# 출력형식
  1
  1 2
  1 2 3
  1 2 3 4
  1 2 3 4 5
 
<script>
 for (i=1; i<=5; i++)
 {
  for (j=1; j<=i; j++)
// 조건식에서 값을 고정하지 않고 내가 필요로 하는 변수가 있다면 대입 가능
  {
  document.write(j+"&nbsp");
  }
  document.write("<br>");
 }
document.write("<br>");
document.write("<br>");
</script>

* 중첩 for문의 사용 -4

# 출력형식
  1
  2 2
  3 3 3
  4 4 4 4
  5 5 5 5 5

<script>
 for (i=1; i<=5; i++)
 {
  for (j=1; j<=i; j++) // 조건식에서 값을 고정하지 않고 내가 필요로 하는 변수가 있다면 대입 가능
  {
  document.write(i+"&nbsp");
  }
  document.write("<br>");
 }

document.write("<br>");
document.write("<br>");

* 중첩 for문의 사용 -5

# 출력형식
  1 2 3 4 5
  1 2 3 4
  1 2 3
  1 2
  1

<script> 
 for (i=5; i>=1; i--) // 5행이기때문에 5번만 반복되도록 조건식을 짜주면 되고 중첩 for문에서
 // 변수에 지정된 값을 활용하기 위해 변수의 초기값과 조건식과 증감조건을 설정
 {
  for (j=1; j<=i; j++) // i값에 따라 출력되는 열의 수가 달라진다보면 된다.
  // 5에서 1까지 내려가므로 첫번째 출력은 j값1로 시작하여 1 2 3 4 5
  // 두번째는 i값이 4가 되어 j값의 출력은 1 2 3 4
  // :
  // i값이 1이 되며 j값은 1번만 출력되고 j값과 i값이 같아 for문 종료
  {
   document.write(j+"&nbsp;");
  }
  document.write("<br>");
 }

document.write("<br>");
document.write("<br>");
</script>

* 중첩 for문의 사용 -6

# 출력형식 (살짝 삐뚤어졌다;)
                1
             1 2
          1 2 3
       1 2 3 4
    1 2 3 4 5 

<script>
for (i=1; i<=5; i++) // 5행, i값은 1→5까지 순차적으로 1씩 증가
{
 for (k=1; k<=5-i; k++) // 공백을 띄워주는 조건 설정
 // i가 1일때 k는 4번 공백 반복 후
 {
  document.write("&nbsp;&nbsp;");
 }
 for (j=1; j<=i; j++) // 여기로 와서 j값 1 출력 j가 1증가하면 조건식이 거짓이므로
 {
  document.write(j+"&nbsp;");
 }
 
 document.write("<br>"); // 줄내리기 실행, 그리고 다시 for문의 시작으로 가서 i값 1증가하여
 // 2가 되고 k값은 5-2=3이 되어 공백3번 반복 후 1<=2 가 참이므로 2번 반복하고 여기로 와서 또 줄내림
}
</script>

* 중첩 for문의 사용 -7

# 출력형식 (살짝 삐둘어졌다;)
 1 2 3 4 5
    1 2 3 4
       1 2 3
          1 2
             1

<script>
for (i=5; i>=1; i--)
{
 for (k=1; k<=5-i; k++) // 공백설정: i의 초기값이 5이므로 1<=0은 거짓
 {
  document.write("&nbsp;&nbsp;");
 }
 for (j=1; j<=i; j++) // 1<=5 참이므로 j값 5번 출력 후 종료
 {
  document.write(j+"&nbsp;");
 }
 document.write("<br>"); // 줄내림 실행 후 처음 for문으로 다시 시작하여
 // i값이 4가 되고 두번째 for문이 1번 실행되서 공백이 한번 생기고
 // 세번째 for문이 4번 출력 후 줄내림.. 이런식으로 1에서 종료.
}
</script>

* 중첩 for문의 사용 -8

# 출력형식
            ★
         ★★★
      ★★★★★
   ★★★★★★★
★★★★★★★★★

// 공백이 없는 소스를 먼저 작성
// 즉 이런 모양
//★
//★★★
//★★★★★
//★★★★★★★
//★★★★★★★★★

<script>
for (i=1; i<=9; i+=2) // 1 3 5 7 9
{
 for (j=1; j<=i; j++) // i가 1일때 j를 1번 반복, 3일때 3번 5일때 5번 7일때 7번 9일때 9번 반복
 {
  document.write("★");
 }
 document.write("<br>");
}
</script>

// 위처럼 작성 후 아래처럼 수정/작성 하면 이해하기가 조금 쉬워(?)진다
<script>
for (i=1; i<=9; i+=2) // 1 3 5 7 9
{
 for (k=1; k<=(9-i)/2; k++) // 규칙을 잘 찾아내는 것이 중요하다
 // (9-1)/2=4, (9-3)/2=3, (9-5)/2=2, (9-7)/2=1, (9-9)/2=0
 // 1<=4 → 4번 아래공백4번반복
 {
  document.write("&nbsp;&nbsp;");
 }
 for (j=1; j<=i; j++)
 {
  document.write("★"); // 4번공백 반복 후 1<=1 이므로 한번 출력 후
 }
 document.write("<br>"); // 줄내림 & 최상단 다시 반복
}
</script>

** while 반복문

for 문처럼 (초기값; 조건식; 증감값)으로 초기값과 증감값이 한문장에 다 들어가는데 반해
while문은 조건식만 괄호안에 들어가고 초기값/증감값은 그 외의 공간에 기술 한다.

while(조건식){
반복문안에 조건식의 변수의 변화되는 수식을 넣지 않으면 무한반복
}

** while문의 사용 -1

# 출력형식
1
2
3
4
5
6
7
8
9
10

<script>
a=1 // a의 변수선언과 동시에 값을 1로 초기화
while (a<=10) // 1부터 10까지 출력
{
  document.write(a+"<br>");
  a++; // 1의 값을 먼저 출력 후 증가 
}
</script>

** while문의 사용 -2

# 출력형식
1
2
3
4
5
6
7
8
9
10


<script>
a=0 // 0일때 0을 출력하고 싶지않다면
while (a<10) // 같거나 작을 때에 같거나=를 빼고
{
 a++; // 증가수식의 위치를 위로 바꿔 값이 미리 증가되고 출력되도록 한다
 document.write(a+"<br>");
 }
</script>

** while문의 사용 -3

// 단을 입력받아 그 단을 출력: 구구단
<script>
dan = prompt("단을 입력하세요(1~9단)","");
d=1;
while (d<10)
{
 document.write(dan+" x "+d+" = "+dan*d+"<br>");
 d++;
}
</script>

** while문의 사용 -4

# 출력형식
12345
12345
12345
12345
12345

<script>
a=0
b=0
while (a<5) // 1. 0<5 참 이므로 다음을 실행, 10. 1<5 참 이므로 앞으로 4번더 실행해서 총 5행 출력
{
 b=0
 while (b<5) // 2. 0<5 참 이므로 다음을 실행, 5. 1<5 참이므로 실행,
 {
  b++; // 3. b=1이 된다. 6. b=2
  document.write(b+"&nbsp"); // 4. 1출력, 7. 2 .. 5까지 출력 후 5<5 거짓이므로
   
 }
 document.write("<br>"); // 8. 줄내림
 a++; // 9. a값 1증가하여 1
}
</script>

※ 연산자 우선순위

1. () 괄호가 최우선순위    
2. 사칙연산자(* / + -) 같은 우선순위의 연산자끼리는 왼쪽부터 
3. 관계연산자(> < >= <= == !=)는 사칙연산보다 우선순위가 낮다.
4. 논리연산자(&& || !)는 관계연산자보다 우선순위가 낮다.

∴ 괄호 > 사칙연산자 > 관계연산자 > 논리연산자

*** do~while 문 : do 다음의 {} 안의 소스는 무조건 실행하며 다음에 위치하는 while은
조건식이 참일 때 조건식 다음에 위치하는 {}안의 증감값을 반복.. 한다랄까..
do
{
 무조건 실행
}
while (조건식); 조건식이 참이면 반복

*** do~while문의 사용 -1

# 출력형식
1
2
3
4
5
6
7
8
9
10

<script>
a=1 // a값을 1로 초기화
do // 다음의 문장을 무조건 실행
{
 document.write(a+"<br>"); 
 a++; // 1출력 후 1증가
}
while (a<=10); // a가1일때 조건식이 참이고 10 이상일 때 거짓이 되므로 1~10까지 출력
</script>

**** for문 while문 예제 -1

# 출력형식
임의의 수(su)를 입력받아 그 수까지의 합을 구하라.
1~su까지의 합은 xxx


<script> // for문 이용
su=prompt("수를 입력하세요","");
hap=0;
for (i=1; i<=su; i++)
{
 hap=hap+i; // i값만큼 증가하는 것을 반복
}
document.write("for 문에서의 1~"+su+"까지의 합은 "+hap+"<br>");
</script>

------------------------------------------------------------------

<script> // while문 이용
su=prompt("수를 입력해봐","");
hap=0;
i=1
while (i<=su)
{
 hap=hap+i;
 i++;
}
document.write("while문에서의 1~"+su+"까지의 합은 "+hap+"<br>");
</script>

**** for문 예제 -2

# 출력형식
임의의 수(su)를 입력받아 그 수까지의 짝수의 합을 구하라.

<script>
su=prompt("수를 입력하세요","");
hap=0;
for (i=2; i<=su; i+=2) // i를 1이 아닌 2로 만들고 증가값을 2로 하여 2,4,6,8.. 짝수만 i값으로 초기화 되도록 설정
{
 hap=hap+i // 0+2, 2+4, 6+6.... 이런식이 되도록하여 합을 누적한다
}
 document.write("1~"+su+"까지의 짝수의 합은 <b><font size='30'>"+hap+"</font></b>");
</script>

**** for문 예제 -3

# 출력형식
임의의 수(su)를 입력받아 그 수까지의 짝수의 합과 홀수의 합을 구하라.

<script>
su=prompt("숫자 넣어봐","");
hsum=0; jsum=0;
for(i=1; i<=su; i++)
{
 if (su%2==0) // 짝수
 { jsum+=i;
 }else // 홀수
 {
 } hsum+=i;
}
document.write("1~"+su+"까지의 짝수의 합은 "+jsum+"<br>");
document.write("1~"+su+"까지의 홀수의 합은 "+hsum);
</script>

***** break 
반복문에서는 break앞에 어떤 조건을 주고 그 조건이 만족할 시 반복문 종료

***** break 사용 예제(for문) -1

# 출력형식
1부터 임의의 수까지의 합이 2011보다 크거나 같을 때 break

<script>
sum=0;
 for (i=1; i<=100; i++)
 {
  sum += i; // 1부터 100까지의 합을 sum에 누적
  if (sum>=2011) break;  // sum의 값이 2011보다 크거나 같을 때 멈춤
  }
 document.write("1~"+i+"까지의 합은 "+sum);
</script>

***** break 사용 예제(while문) -2

# 출력형식
1부터 임의의 수까지의 합이 2011보다 크거나 같을 때 break

<script>
sum=0;
 i=1;
 while (true) // 어떤 상황이 될지 몰라 논리식을 무조건 참으로 설정?
 {
  sum += i;
  if (sum>=2011)
  { break;
  }i++
 } 
 document.write("1~"+i+"까지의 합은 "+sum);
</script>

****** continue
반복문내에 사용하며 continue다음의 문장(들)을 skip

****** continue 사용 예제 -1

# 출력형식
1~100사이의 값중에 3의 배수와 5의 배수를 제외한 나머지 값의 합을 구하장

<script>
hap=0;
for (i=1; i<=100; i++)
{
 if(i%3==0 || i%5==0) continue;
 hap += i;
}
document.write(hap);
</script>

******* 회원가입 폼: 아이디 검색창/대화명 검사창/우편번호 검사창 띄우기
(함수선언)

<head><script> // 함수 선언 스크립트는 <head>태그안에 넣는 것이라 하던데 설명을 못들음
function winOpen(){
 window.open("idChk.html","w","width=300, height=100, resizable=yes");
 /* 속성에 빈칸으로 구분했으면 계속 빈칸, 콤마로 구분했으면 계속 콤마
  1. 새창에 표시될 파일명
  2. 창이름: 없을 때도 "" 따옴표는 해줘야한다.
  이름이 없다면 팝업창이 계속 열린다. 이름이라는 것이 
  중복으로 띄움을 방지하도록 체크하는 역할
  3. 속성 width: 창너비, height: 창높이
      location: 주소표시줄, menubar: 메뉴표시
      resizable : 창의 크기조절여부
      scrollbars : 스크롤바 표시여부
      toolbar : 툴바표시여부
      속성은 yes / no 로 표시
 */
// 대화명 검사창 띄우기 닉네임 입력되고 창 닫힘
function nickChk(){window.open("nickChk.html","n","width=300, height=100")}
// 우편번호 검사창 띄우기 3칸이 입력되고 창 닫힘
function zipChk(){window.open("zipChk.html","n","width=300, height=400")}
</script></head>

******* 회원가입 폼: 아이디 검색창/대화명 검사창/우편번호 검사창 띄우기
(onClick이벤트 설정)

<body>
<!-- 중간 소스 생략 -->
<input type="button" value="ID중복검사" onClick="winOpen()">
<!-- 중간 소스 생략 -->
<input type="button" value="중복검사" onClick="nickChk()">
<!-- 중간 소스 생략 -->
<input type="button" value="검색" onClick="zipChk()">
<!-- 중간 소스 생략 -->
</body>

******* 회원가입 폼: 해당 팝업창 개별 html파일 작성

<html>
 <head>
  <title> 아이디 중복검사 </title>
 <script>
 function idChkClose()
 { // 메인폼에 검색한 아이디를 표시
   // 팝업창에서 팝업을 뜨게 만든 부모페이지를 가르키는 것: opener
  opener.document.frm.memId.value="myID"  
   // 현재창 닫기
  window.close();
  //self.close();
 }
 </script>
 </head>
 <body>
  당신이 입력한 아이디는 사용가능한 <br>아이디 입니다.
  <p>
  <input type="button" value="Close" onClick="idChkClose()">
 </body>
</html>

-----------------------------------------------------------------

<html>
 <head>
  <title> 닉네임 중복 검사 </title>
 <script src="nickScript.js"> // 외부파일 링크
 </script>
 </head>

 <body>
  <form name="nickFrm">
 대화명 : <input type="text" name="nick"><br>
 <input type="button" value="닉네임사용하기" onClick="nickClose()">
 
 
 </body>
</html>

-----------------------------------------------------------------

<html>
 <head>
  <title> 주소 검색 </title>
 <script>
 function zipChkClose()
 {
 if(zipFrm.addr.value==""){ // == 주의
  alert("상세주소를 입력하세요!!!")
  return; // 리턴이 나오는 순간 함수 종료 지점으로 이동
    // 밑에 명령어들을 건너뛰기 때문에 창이 닫히지 않는다
  }
 opener.document.frm.memZipCode01.value="123";
 opener.document.frm.memZipCode02.value="456";
 opener.document.frm.memAddr1.value="서울시 영등포구 당산동";
 opener.document.frm.memAddr2.value=zipFrm.addr.value;
 window.close();
}
 </script>
 </head>

 <body>
 <form name="zipFrm">
 우편번호 : 123-456<br>
 주소 : 서울시 영등포구 당산동<br>
 상세주소 : <input type="text" name="addr"><br>
 <input type="button" value="주소사용하기" onClick="zipChkClose()">
 </form>
 </body>
</html>

'Html/Jsp/Javascript' 카테고리의 다른 글

Html,Jsp,Css_07  (0) 2011.10.18
[Test] for문과 테이블을 이용한 구구단 출력하기 & while문으로도 해보기  (0) 2011.10.17
Html,Jsp,Css_06  (0) 2011.10.17
[Test] 회원가입 폼 만들기  (1) 2011.10.16
Html,Jsp,Css_05  (0) 2011.10.14
Html,Jsp,Css_04  (0) 2011.10.13
Html,Jsp,Css_05 Html/Jsp/Javascript 2011. 10. 14. 18:02

전일에 이어 <script>문 작성

*) if 문 : 만약에 ~ 하다면... 
 
  범위의 조건을 설정하여 조건이 참이면 실행, 거짓일 땐 else구문을 실행한다. 
 
  연산식(A=500/2같은)에서는 아닌 경우도 있지만(오른쪽 먼저계산)
  기본적으로 코드 작성의 순차는 위에서 아래, 왼쪽에서 오른쪽이다.
  허나 if문에서는 상황에 따라 왔다 갔다 하는 속성을 가진다고 볼 수 있겠다.

*-I) if 문의 학점 구하기 : 결과값이 참이어도 다음 문구를 반복 실행한다

<script>
jum=prompt("점수를 입력하세요(0~100점 사이의 값",""); // 사용자로부터 숫자 입력받음

// 입력받을 숫자의 범위 설정 ▽

if(jum<0 || jum>100) // ←범위를 벗어난 경우  
 // if(!(jum>=0 && jum<=100)) ← 앞에 not이 붙어 있으므로 범위를 벗어난 경우
 // if(jum>=0 && jum<=100) ←정상범위
 // ||는 둘중 하나 &&는 둘다 실행, ||가 실행 속도면에서 유리
 {
  alert(jum+"(은)는 점수의 범위를 벗어났습니다.");
 }

// 정상적인 범위의 값이 들어온 경우 ▽
else{
if(jum>=90){ // 만약 95 입력시
   document.write(jum+" = A학점: 고생많았네"); // true: 결과 출력
  }
  if(jum>=80 && jum<90){
   document.write(jum+" = B학점: 나름했군"); // 별개의 문장이므로 결과 나왔지만 비교
  }
  if(jum>=70 && jum<80){
   document.write(jum+" = C학점: 잤나?"); // 또 비교
  }
  if(jum>=60 && jum<70){
   document.write(jum+" = D학점: 잤군"); // 또
  }
  if(jum<60){
   document.write(jum+" = F학점: 나가"); // 또;; 비효율적이다. 그래서 나온것이 else if
  }
</script>

*-II) if else문을 이용한 학점구하기: if문의 결과가 참이면 종료 거짓일때 else if 실행

<script>
jum=prompt("점수를 입력하세요(0~100점 사이의 값",""); // 사용자로부터 숫자 입력받음

// 입력받을 숫자의 범위 설정 ▽

if(jum<0 || jum>100) // ←범위를 벗어난 경우  
 // if(!(jum>=0 && jum<=100)) ← 앞에 not이 붙어 있으므로 범위를 벗어난 경우
 // if(jum>=0 && jum<=100) ←정상범위
 // ||는 둘중 하나 &&는 둘다 실행, ||가 실행 속도면에서 유리
 {
  alert(jum+"(은)는 점수의 범위를 벗어났습니다.");
 }

// 정상적인 범위의 값이 들어온 경우 ▽
if(jum>=90){ // A학점
  document.write(jum+" = A학점: 고생많았네"); // 참이면 여기서 else{} 끝으로 이동: 끝 거짓은 다음으로
 }else if(jum>=80){
  document.write(jum+" = B학점: 나름했군");
 }else if(jum>=70){
  document.write(jum+" = C학점: 잤나?");
 }else if(jum>=60){
  document.write(jum+" = D학점: 잤군");
 }else{
  document.write(jum+" = F학점: 나가");
 } // 참이 나오면 끝. 안나오면 else{}안의 실행
// → → → → → → → → → → → → → → → → → → → 참을 만족할 때 여기로 와서 끝남
</script>

# 결과(*) (*-I과 *-II 결과는 동일)



**) switch문의 구조

<script>
s="su" // 조건
  switch(s){          // (변수or상수)에 있는 값과
   case "월":document.write("<img src='aaa.jpg'>");
   // case "상수": 에 있는 값이 같으면 해당case의 :다음을 출력한다.
   // 조건이 맞는것이 없을땐(default가 없다는 전제로 그냥 종료)
    break; // case가 반복일때 멈춤
   case "5":documnet.write(10*10);
    break; // break가 없다면 다음 case까지 연속으로 실행된다
   case "su":document.write(s+"요일"); //su요일
    break;
   default:document.write("잘못들어온 값"); // case에 해당값이 없다면 :다음을 출력,필요 없으면 생략해도 됨 
  }
</script>

**-I) switch문을 이용한 학점 구하기

⊙ 특정 수를 정수화시키는 method : parseInt
    ex) document.write(parseInt(95/10)); → 9

<script>
jum=prompt("점수를 입력하세요(0~100점 사이의 값",""); // 사용자로부터 숫자 입력받음

// 입력받을 숫자의 범위 설정 ▽

if(jum<0 || jum>100) // ←범위를 벗어난 경우  
 // if(!(jum>=0 && jum<=100)) ← 앞에 not이 붙어 있으므로 범위를 벗어난 경우
 // if(jum>=0 && jum<=100) ←정상범위
 // ||는 둘중 하나 &&는 둘다 실행, ||가 실행 속도면에서 유리
 {
  alert(jum+"(은)는 점수의 범위를 벗어났습니다.");
 }

// if 문을 사용할때와 아래 목적은 같다. (학점 출력)
switch (parseInt(jum/10)) // 입력받은 jum의 값을 10으로 나눈 몫
 {
 case 10:
 case 9:hak="A학점: 고생했네";break
// △ 몫이 10 또는 9일 때의 hak의 변수선언 동시에 따옴표안의 내용이 변수에 저장?
// 좀더 쉬운말이 생각이 나지 않는다..
 아래도 같은 의미!?
 case 8:hak="B학점: 나름했군";break
 case 7:hak="C학점: 잤나?";break
 case 6:hak="D학점: 잤군";break
 default:hak="F학점: 나가";break
 }
 document.write(jum+" = "+hak); 
 }
  </script>

# 결과 (**-1)
상단의 결과 (*)과 동일 

**-II) switch문을 이용한 날짜 구하기

⊙ 아래 예제에서 볼 수 있는 method를 정리해볼까..

- 일단 method란? Javascript의 Object에 속해 있어 특별한 기능을 수행하는 함수
   ex) Objectname.method() <--메소드 표현
         Objectname.properties <--속성 표현
- new Date() : 이것도 메소드..? 인가? 여튼 시스템상의 날짜를 가져오는 역할을 한다
- get : 단어 뜻 그대로 앞에 붙은 변수명에 해당되는 객체에서 정보(?)를 가져오는 역할
- set : 앞에 붙은 변수명에 해당되는 객체의 값을 초기화 하는 역할
          (예제를 더 봐야 알겠지만 아직 set에 대해 확실히 감이 안온다)

<script>
// 시스템의 날짜와 시간정보 얻어오기
 date = new Date(); // 변수=생성 클래스(). 시스템의 날짜를 구하는 객체
 y = date.getYear(); // date라는 객체 안에서 Year(년도)를 얻어내(get)라.
// get은method - 정보를 얻어내는 기능

 // date.setYear(2012) : 객체의 년도만 2012년으로 셋팅해라.
 m = date.getMonth()+1; // 월구하기: 0-1월 ~ 11-12월)
 d = date.getDate(); // 일구하기
 w = date.getDay(); // 요일구하기 : 0-일, 1-월, 2-화, 3-수, 4,-목, 5-금, 6-토
 h = date.getHours(); // 시간 구하기
 mm = date.getMinutes(); // 분 구하기
 // 초 구하기 : s = date.getSeconds(); // 자바에서는 시/분/초 에 s가 없다.

// 현재 요일을 찾아 document.write로 현재 날짜 시분 출력 
 switch (w) // w= 0~6 (일~토)
 {
 case 0:wStr="일";break; // 자바스크립트에서는 명령문 안에서 (wStr같은) 변수선언 가능
 case 1:wStr="월";break;
 case 2:wStr="화";break;
 case 3:wStr="수";break;
 case 4:wStr="목";break;
 case 5:wStr="금";break;
 case 6:wStr="토";break;
 }
 document.write(y+"년 "+m+"월 "+d+"일 "+wStr+"요일 "+h+"시 "+mm+"분<br>")
 // 여러 케이스에서 변수를 대체함으로 출력명령은 하나로도 가능
 
 // 위와 같지만 요일에 해당되는 이미지 출력 (케이스별 출력)
 switch (w)
  {
  case 0:document.write("<img src='../html/img/week/sun.jpg'>");
  break;
  case 1:document.write("<img src='../html/img/week/mon.jpg'>");
  break;
  case 2:document.write("<img src='../html/img/week/tue.jpg'>");
  break;
  case 3:document.write("<img src='../html/img/week/wed.jpg'>");
  break;
  case 4:document.write("<img src='../html/img/week/thu.jpg'>");
  break;
  case 5:document.write("<img src='../html/img/week/fri.jpg'>");
  break;
  case 6:document.write("<img src='../html/img/week/sat.jpg'>");
  }
 
</script>

# 결과 (**-II)

△ 윈도우상의 날짜를 변경함으로 다른 이미지 출력가능


*** 반복문 for

⊙  for (초기값; 최종값(조건); 증가/감소)

(△ 본인의 생각일뿐; 설명이 잘못되었다면 지적바람)

<script>
 img = "<img src=../html/img/blog_img.GIF>";
 for ( cnt=1; cnt<=3; cnt++ ) // 자바 스크립트는 변수값으로 자동으로 형선언이 된다.
 {
  document.write(img);
 }
 document.write("<p>");
 
 // 1~50까지 홀수 출력
 for ( n=1; n<100; n+=2) // 초기값1에서 2씩 증가시켜 홀수 출력
 {
  document.write(n+"&nbsp;");
 }

 document.write("<p>");
 
// 1~50까지 홀수 출력: table에 넣어서
 document.write("<table border=1>");
 document.write("<tr>");
 for ( n=1; n<100; n+=2)
 {
  document.write("<td width=50 align=center>"+n+"</td>");// width는 브라우저크기에 맞춰짐
  if((n+1)%10==0) document.write("</tr><tr>"); // 추가: if문으로 조건문, 행내리기..
 } // (9+1)%10==0 이므로 9에서 다음줄로 넘어가는 방식
// 규칙(조건문)을 잘 찾아내는 능력 중요.
 document.write("</tr></table>");
 </script>

# 결과


***-I) for문 연습1: 숫자를 입력받아 구구단 출력

<script>
 dan = prompt("숫자를 입력하세요","");  
  document.write("<table border=1>");
  document.write("<caption>== "+dan+"단 ==</caption>");
  
 for (d=1; d<10 ; d++)
 {
  if (d%2==0)
  {
   document.write("<tr bgcolor=#ffcc00>");
  }
  else {
   document.write("<tr>");
  }
  document.write("<td align=center>"+dan+" * "+d+" = "+dan*d+"</td></tr>");
 }
  document.write("</table>");
 </script>

# 결과 (***-I)
 



***-II) for문 연습2: 자바스크립트로 달력만들기


<script>
// 1. 조건 설정하기
 now = new Date(); //오늘날짜와시간에 관한 정보
 y = now.getYear(); //현재 연도
 m = now.getMonth()+1; //현재 월 : 1월이 0으로 시작하여 +1
 d = now.getDate();
 w = now.getDay();

 now.setDate(1); // 금일 날짜를 1일로 바꾼다
 w = now.getDay(); // 1일에 대한 요일 구하기
 
// 그달의 마지막 날 구하기
// 현재 연도를 4로 나눈 값의 나머지가 0 이고
// 100으로 나눈 값의 나머지가 0 
// 또는 현재 연도를 400으로 나눈 값의 나머지가 0 일 때
// 2월의 말일을 구할 수 있다? 라는 것 같다.
// y%4 == 0 && y%100 != 0 || y%400 == 0
// 위와 같이 입력되는게 정석일까?
 switch(m){
  case 1:
  case 3:
  case 5:
  case 7:
  case 8:
  case 10:
  case 12: lDay=31; break;
  case 2:
   if (y%4 == 0) // 위에서 말한걸 간단히 적용 
   {
   lDay=29; // 나머지가 0일때 말일은 29일
   }
   else {
   lDay=28; // 나머지가 0이 아닐때 말일은 28일
   }
   break;
   default : lDay = 30; // 4월은 항상 30일 이라던데...상식부족?!
 }
 document.write("<table border=1>");
 document.write("<caption>"+y+"년 "+m+"월</caption>");
 document.write("<tr><td><img src=../html/img/c.gif></td></tr>");

 document.write("<tr><td>");
 // 달력날짜 시작▽
 document.write("<table width=100%>");
 document.write("<tr><td>일<td>월<td>화<td>수<td>목<td>금<td>토</tr> <tr>");
 for (space=1; space<=w; space++)
 {
  document.write("<td></td>") // 1일 출력전공백
 }

 // 날짜
 cnt = w;
 for (day=1; day<=lDay; day++)
 {
  document.write("<td>"+day+"</td>");
  cnt++;
  if (cnt==7)
  {
   document.write("</tr><tr>");
   cnt=0;
  }
 }

 document.write("</tr></table>");
 // 달력날짜 △
 document.write("</td></tr>");
 
document.write("</table>");
 </script>

# 결과 (***-II)
 


※ 작성된 소스만 읽어보면 이해도 되고 재밌다 싶으면서도 직접 해보세요 하면..
할줄은 모르는 상태?

'Html/Jsp/Javascript' 카테고리의 다른 글

Html,Jsp,Css_06  (0) 2011.10.17
[Test] 회원가입 폼 만들기  (1) 2011.10.16
Html,Jsp,Css_05  (0) 2011.10.14
Html,Jsp,Css_04  (0) 2011.10.13
Html,Jsp,Css_03  (0) 2011.10.12
Html_02  (0) 2011.10.11