반응형

3의 배수와 5의 배수의 개수와 그들의 합을 구하는 문제

 

 

int x, y = 0;    
int hap = 0;
    
    for(x=1; x<=100; x++) {
        if(x % 3 == 0 && x % 5 == 0) {
            y+=1;
            hap += x;
        }
    }
    System.out.println("개수 : " + y + " 합 : " + hap);
 
// 결과값
 
// 개수 : 6 합 : 315
 
 

 

 

변수 x와 y그리고 hap 의 값을 0으로 초기화시켜줍니다.

x는 수1의배수와 수2의 배수를 알기 위한 변수로 사용되고,

y는 그들의 개수를 누적해주는 역할을 합니다.

if문에서 x의 조건을 만족하는 경우 hap에 누적해줍니다.

 

for문과 if문을 이용

x의 값을 3으로 나는 나머지가 0이고

x의 값을 5로 나눈 나머지가 0이라면

개수(변수) y 는 숫자 1을 증가 시켜주고, 그 숫자를 hap에 누적해준다.

 

해당 과정을 x가 100이 될때까지 반복 수행할 수 있도록 합니다.

 

반응형
반응형

프로그래밍을 하는 사람들이라면 누구나 한번쯤은 해보았을법한 문제입니다.

2 x 1 = 2

2 x 2 = 4

.

.

.

2 x 9 = 18

이런식으로 9단까지 반복하는 문제입니다.

밑의 소스를 확인해보겠습니다.

 

i는 1부터 9까지 반복하고 j는 2부터 9까지 반복합니다.

i가 1일때 j는 2부터 9까지 가로로 출력해주고 내부 for문을 빠져나와서 외부 for문을 1증가시킵니다.

i가 2일때 j는 2부터 9까지 위와 같은 과정을 반복하고

i가 9까지 반복할 수 있도록 합니다.

 

for(i = 1; i <=9; i++) {
            for(j = 2; j <= 9; j++) {
                System.out.print(j + " * " + i + " = " + i*+ "   ");
            } System.out.println();
        }
 
 
// 결과값
 
// 2 * 1 = 2   3 * 1 = 3   4 * 1 = 4   5 * 1 = 5   6 * 1 = 6   7 * 1 = 7   8 * 1 = 8   9 * 1 = 9   
// 2 * 2 = 4   3 * 2 = 6   4 * 2 = 8   5 * 2 = 10   6 * 2 = 12   7 * 2 = 14   8 * 2 = 16   9 * 2 = 18   
// 2 * 3 = 6   3 * 3 = 9   4 * 3 = 12   5 * 3 = 15   6 * 3 = 18   7 * 3 = 21   8 * 3 = 24   9 * 3 = 27   
// 2 * 4 = 8   3 * 4 = 12   4 * 4 = 16   5 * 4 = 20   6 * 4 = 24   7 * 4 = 28   8 * 4 = 32   9 * 4 = 36   
// 2 * 5 = 10   3 * 5 = 15   4 * 5 = 20   5 * 5 = 25   6 * 5 = 30   7 * 5 = 35   8 * 5 = 40   9 * 5 = 45   
// 2 * 6 = 12   3 * 6 = 18   4 * 6 = 24   5 * 6 = 30   6 * 6 = 36   7 * 6 = 42   8 * 6 = 48   9 * 6 = 54   
// 2 * 7 = 14   3 * 7 = 21   4 * 7 = 28   5 * 7 = 35   6 * 7 = 42   7 * 7 = 49   8 * 7 = 56   9 * 7 = 63   
// 2 * 8 = 16   3 * 8 = 24   4 * 8 = 32   5 * 8 = 40   6 * 8 = 48   7 * 8 = 56   8 * 8 = 64   9 * 8 = 72   
// 2 * 9 = 18   3 * 9 = 27   4 * 9 = 36   5 * 9 = 45   6 * 9 = 54   7 * 9 = 63   8 * 9 = 72   9 * 9 = 81   

 

반응형
반응형

반복문

 

for문

반복 횟수가 정해져 있는 문장을 실행할 때 사용

예를 들도록 하겠습니다

        int a;
        int sum=0;
        
        for (a = 1; a <= 10 ; a+=2) { //for( 초기; 조건; 증감) for문은 초기치와 목적치에만 영향을 받게 해줘야 함
            System.out.print(a + " ");
            sum += a; // 누적        
       }

해당 소스를 보면 변수 a는 1부터 10까지 2씩 증가한다는 조건을 확인할 수 있습니다.

 

        System.out.println("\nfor 탈출 후 a값은 ? " + a);
        System.out.println("합은 " + sum);

1 3 5 7 9 를 출력하게 된다.

 

 

다른 몇가지 예를 들어보겠습니다.

 

 

1) for문을 통하여 아스키코드 대문자 A - Z 를 출력하는 방법을 보여드리겠습니다.

 

for(int i = 65; i <=99; i++) {
            System.out.print((char)i + " ");
        }
 

i가 출력문에서 65가 들어가야하지만 앞에 (char)로 형 변환을 주었기 때문에 A를 출력하게 된다.

그러므로 결과값은 

 

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c 과 같이 출력 된다.

 

 

 

2) 거꾸로 아스키코드 문자를 정수로 출력하는 반복문을 실행해보겠습니다.

 

for(int i = 'A'; i <= 'Z'; i++) {
            System.out.print((Integer)i + " ");
        }
 

출력문에서 i가 A부터 출력 되어야 하지만 앞에 (Integer)로 형 변환을 주었습니다.

그러므로 이번 결과값은 다음과 같습니다.

 

65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 

 

 

 

3) 증감식을 다르게 주어보겠습니다.

 

for(int i = 90; i >=65; i-=2) {
            System.out.print((char)i + " ");
        }
 

이번에는 i의 조건이 90부터 65까지 줄어드는 것을 반복합니다. 그런데 증감식을 확인해보면 2씩 줄어들고 출력에서 형 변환을 준 것을 볼 수 있습니다. 그렇다면 이번 결과값은 다음과 같습니다.

 

Z X V T R P N L J H F D B 

 

 

 

4) for문 안에 초기값과 증감식을 2개씩 줘보겠습니다.

 

for(int a = 0, b = 5; a <= 5; a++, b++) {
            System.out.println(a + " " + b);
        }
 

 

초기값을 각각 a = 0 과 b = 5 주고 a++ , b++ 로 1씩 증가시키면

0 5
1 6
2 7
3 8
4 9
5 10

과 같이 출력됩니다.

a가 만족하는 값 5까지 반복하고 for문을 탈출합니다.

 


 

다중 for문

 

 

for문 안에 for문에 들어가있는 것을 다중 for문이라고 합니다.

바로 예를 들어보도록 하겠습니다.

for(int m = 1; m <= 3; m++) {
        System.out.println("m : " + m);
        for(int n = 1; n<=4; n++) {
            System.out.print("n = " + n);
        }
        System.out.println();
    }
r

돌아가는 방식은 이렇습니다.

 

- m이 1인 경우 m 값을 출력하고 다음 for문으로 들어갑니다.

- n이 1부터 시작하고 for문이 만족하는 4까지 반복 출력해주고 내부 for문을 빠져나갑니다.

위와 같은 과정을 m이 3이 될 때까지 반복하고 나옵니다.

 

출력값은 다음과 같습니다.

 

m : 1
= 1n = 2n = 3n = 4
m : 2
= 1n = 2n = 3n = 4
m : 3
= 1n = 2n = 3n = 4

continue문

 

ex: for(초기값; 조건식; 증감식) {
        for(초기값; 조건식; 증감식) {
            
            실행문;
            continue// 안쪽 for문으로 이동            
            continue// ex for문으로 
        }
    }

 

 

여기서 ex는 라벨로 별명을 주어준것과 비슷한 의미이다.

 

 

for(int aa = 1; aa <= 10; aa++) {
            
        if(aa == 3continue;  // aa가 3이면 하단 문맥을 생략하고 다시 위로 올라감
        
        System.out.println(aa);
        
        // if(aa == 5) return; // return을 만나면 메인의 중괄호를 끝냄
        if(aa == 5break// 해당되는 구간에서 반복문을 탈출 시킴
        System.out.println("nice");
   }

 

결과

1
nice
2
nice
4
nice
5
nice
6
nice
7
nice
8
nice
9
nice
10
nice
 

break문

 

가장 가까운곳의 반복문이나 다음에 나올 내용인 switch문을 빠져나간다.

 

continue 설명때 사용한 소스코드에서 break문을 사용해보도록하겠습니다.

for(int aa = 1; aa <= 10; aa++) {
            
            if(aa == 3continue;
            
            System.out.println(aa);
 
            if(aa == 5break// 해당되는 구간에서 반복문을 탈출 시킴
            System.out.println("nice");
        }
 

 

결과값

 

1
nice
2
nice
4
nice
5

while문

 

같은 반복문이지만 for문과 달리 조건이 만족할때만 반복한다.

 

        int w = 1;
        
        while(w <= 5) {
            System.out.println("w : " + w);
            w++// 반복문 탈출 문장이 반드시 필요
        }
 

 

w의 초기값은 1로 주어졌으며, 5가 되기전까지 만족하므로 반복하여 실행하게 된다.

 

w : 1 
w : 2 
w : 3 
w : 4 
w : 5 

do ~ while문

 

while문과 동일하지만 차이점이 있다면 do~while문은 조건식이 뒤에주어집니다.

 

        w = 1;
        do {
            System.out.println("w = " + w );
            w++;
        }while(w<= 5);
 
 
결과값은동일합니다.
 
= 1
= 2
= 3
= 4
= 5

 

반복문에 관련하여 공부한 문제

2020/03/03 - [JAVA/JAVA 프로그래밍 응용] - for문을 이용하여 어떤 수1의 배수이면서 수2의 배수의 개수와 그들의 합

2020/03/03 - [JAVA/JAVA 프로그래밍 응용] - for문을 이용한 구구단 찍기

반응형

'JAVA > JAVA' 카테고리의 다른 글

6 - 클래스 ( class )  (0) 2020.03.03
5 - 배열(Arrary)  (0) 2020.03.03
4 - 조건문 if & switch  (0) 2020.03.03
2 - 연산자  (0) 2020.03.03
1 - 데이터 타입 & 형 변환  (0) 2020.03.02
반응형

연산자의 우선순위는 다음과 같다

종류 연산자 우선순위
최우선 연산자 [] , {}, ()

높음

|

|

|

|

 

낮음

단항 연산자 ++ , -- , !
산술 연산자  +, -, *, /, %
시프트 연산자 << , >> 
비교 연산자 >, <, >=, <=, ==, !=
논리 연산자 &&, ||
삼항 연산자 (조건식) ? : 
대입 연산자 =, *=, +=

사칙연산의 경우 다들 아시는 부분이니까 예시를 들도록 하겠습니다 !

 

산술연산자

        int a = 5;
        int b = 3;
 
        
        // 산술연산자
        System.out.println(a); // 5 출력
        System.out.println(b); // 3 출력
        System.out.println("a + b = " + (a+b)); // 8 출력
        System.out.println("a / b = " + (a/b));     // 1 출력    
        System.out.println("a % b = " + (a%b)); // 2 출력 (2는 나머지)
        System.out.println("a / b = " + (a/(float)b)); // 1.666.. 출력(float형식이라 소수점까지 반환!)
 
        System.out.println(a / 0.0); // Infinity
        System.out.println(a % 0.0); // 나머지 NaN 출력
        
        System.out.println(3 + 4 * 5); // 23 출력
        System.out.println((3 + 4* 5); // 35 출력
 

단항연산자

 

        //누적
        int no = 1;
        no = no + 1// 2 저장
        
        no += 1// 3 저장
        no++// 4 저장
        System.out.println("no : " + no); // 4 출력
        
        //증감 연산자
        int imsi = 5
        int result = ++imsi + 1
        System.out.println(imsi + " " + result); // 6과 7 출력
        
        int imsi2 = 5;
        int result2 = imsi2++ +1// imsi2의 값5가 1을 더하고 그 값을 result2에 준 후 imsi2 값 증가
        System.out.println(imsi2 + " " + result2); // 6과 6 출력
        System.out.println(imsi2); // 6출력
        System.out.println();
        
        
        //부호
        int imsi3 = 3;
        System.out.println(imsi3); // 3 출력
        System.out.println(-imsi3); // -3 출력
        System.out.println(-imsi3 * -1); // 3출력
 

 

소스에서 볼 수 있듯 ++imsi 는 전위 연산자이고,, imsi2++ 는 후위 연산자이다

여기서 전위 연산자란 연산 실행전에 먼저 실행 시키는 것이고, 후위 연산자란 연산 실행 후에 실행 하는 것이다.

그래서 imsi의 경우 5로 데이터 값을 주었지만 전위연산자를 통해 연산 실행 전에 실행하여 출력하였기 때문에

각각 6과 7이 출력된다.

imsi2의 경우는 후위 연산자를 사용하였기 때문에 연산을 실행하고 하여 각각 6과 6이 출력 되는 것이다.

 

추가! 문자열 사용!

        String ss1 = "대한";
        String ss2 = "민국";
        String ss3 = ss1 + ss2; // ss3에 대한민국 저장
        System.out.println("ss3 " + ss3); // 대한민국 출력
        
        System.out.println("ss3 " + ss3 + "2010"); // 대한민국2010
        System.out.println("ss3 " + ss3 + 2010); // 대한민국 2010
        
        System.out.println(10 + 20); // 30
        System.out.println(10 + Integer.parseInt("20")); // 30
        
        System.out.println(10 + "20"); // 1020
        System.out.println(10 + Integer.toString(20)); // 1020

숫자 + 숫자를 계산하는 경우 ! 30으로 출력 된다.

하지만 숫자 + "문자"와같은 경우는 10 + 문자10으로 계산하여 1020이 출력된다.

Integer.parseInt 문법은 문자를 정수로 바꿔주는 역할 !

Integer.toString 문법은 정수를 문자로 바꿔주는 역할 !

유용하게 쓰이니 알아두면 좋다

 

비교 연산자

a > b : a는 b보다 크다

a < b : a는 b보다 작다

a == b : a와 b의 값이 같은지 여부

a != b : a값이 b의 값과 다르면 true

        int a = 5;
        System.out.println(a > 3); // true
        System.out.println(a < 3); // false
        System.out.println(a == 3); // false
        System.out.println(a != 3); // true

 

논리 연산자

'참' 값이면 true를 출력 '거짓' 값이면 false를 출력

조건1 && 조건2 : 조건1도 만족하고 조건2도 만족하는 경우 true 아니면 false

조건1 || 조건2 : 조건1 또는 조건2를 만족하는 경우 true 아니면 false

        int a = 5;
        int b = 10;
        System.out.println(a > 3 && b <= 10); // true
        System.out.println(a >= 3 && b == 7); // false
        
        System.out.println(a > 6 || b <= 10 ); // true a는 6보다 크거나 b는 10보다 작거나 같다
        System.out.println(a > 3 || b < 5); // true
        
        
        System.out.println(a > 6 || b <= 10); // true
        System.out.println(a > 7 || b < ( 5 + 10)); // true
 

쉬트프 연산자

>>

 : 오른쪽으로 비트, 부호비트 이동
>>>  : 오른쪽으로 비트, 비부호 비트 이동
<<  : 좌측으로 해당하는만큼 비트 이동하고 오른쪽 비는 만큼 0으로 채운다.
 
        int ii = 8, ij;
        System.out.println("ii : " + ii + " " + Integer.toBinaryString(ii)); // 8 1000
        
        ij = ii << 1// 쉬프트 연산자 좌로 1보 남는 오른쪽은 0으로
        System.out.println("ij : " +ij); // 16
                
        ij = ii >> 2// 쉬프트 연산자 우로 2보 남는 왼쪽은 부호와 같은 값으로
        System.out.println("ij : " +ij); // 2
        
        ij = ii >>> 2// 쉬프트 연산자 우로 2보 남는 왼쪽은 0으로
        System.out.println("ij : " + ij); // 2
 

삼항 연산자

변수 = (조건) ? 참 : 거짓

조건이 참이면 : 기준 왼쪽 출력 거짓이면 오른쪽 출력

        // 삼항 연산자
        int re = (ii > 5)?100 : 50 + 20 ; // 변수 = (조건)?참:거짓
        System.out.println("re : " + re);
반응형

'JAVA > JAVA' 카테고리의 다른 글

6 - 클래스 ( class )  (0) 2020.03.03
5 - 배열(Arrary)  (0) 2020.03.03
4 - 조건문 if & switch  (0) 2020.03.03
3 - 반복문 for & while  (0) 2020.03.03
1 - 데이터 타입 & 형 변환  (0) 2020.03.02
반응형

변수


변수란?

- 특정 타입의 데이터를 메모리상에 담을 수 있는 영역을 의미한다.

 

 

  변수를 선언하는 방식

  데이터 타입 변수이름 ;

  ex) int num;

  ex) String name;

 

  위와 같은 변수명에 데이터를 정해주는 방법

  변수이름 = 데이터 값;

  ex) num = 10;

  ex) name = 홍길동;

  변수이름 = 데이터 값;

  ex) num = 10;

  ex) name = 홍길동;

 

  2줄로 입력하지 않고 1줄로 데이터를 주는 방법

  데이터 타입 변수이름 = 데이터 값;

  ex) int num = 10;

  ex) String name = 홍길동;

 


데이터 타입


컴퓨터도 10인 영역에 2만 사용하면 영역을 낭비하는 일이 발생한다.

그 영역 낭비를 방지하고 효율적으로 사용하기 위해서 데이터 타입이 나뉘어진다.

기본형 데이터 타입

정수형

byte 8비트(1byte) 범위 :  ( -128 ~ 127 )
short 16비트(2byte) 범위 : ( -32768 ~ 32767 )
int 32비트(4byte)
long 64비트(8byte)
// 1byte = 8bit
        byte var1;
        var1 = 127;
 
        System.out.println(Byte.MAX_VALUE);    // 127 출력
        System.out.println(Byte.MIN_VALUE);    // -128 출력
        
        short var2 = 20;                     // short 2byte 정수 기억 -32768 ~ 32767
//      short var22 = 222222;                // short 범위를 벗어나기 때문에
        System.out.println("var2 : " + var2);
        
        int var3 = 2147483647;        // int 4byte 정수 기억 -2147483648 ~ 2147483647
//      int var33 = 21474836477;    // int 범위를 벗어나기 떄문에 컴파일 오류
        System.out.println("var3 : " + var3);
        
        
        long var4 = 8999999999999999999L;
        System.out.println(Long.MAX_VALUE); // long형의 최대값이 출력
        System.out.println("var4 : " + var4);  // var4에 89999999999를 준 값 출력

여기서 각 타입의 최대값과 최소값을 보고 싶다면

데이터 타잊 최소값 최대값
byte Byte.MIN_VALUE Byte.MAX_VALUE
short Short.Min_VALUE Short.MAX_VALUE
int Integer.MIN_VALUE Integer.MAX_VALUE
long Long.MIN_VALUE Long.MAN_VALUE

형변환

        //promotion : 자동 형변환(작은기억장소 -> 큰 기억장소)
        //cast : 강제 형변환(큰기억장소 -> 작은기억장소)
        byte b1 = (byte)128;
        System.out.println("b1 : " + b1);
        
        int b2 = 10;
        byte b3 = (byte)b2; // cast : 강제 형변환
        // 변수 형태만 본거기 때문에 int가 들어가면 byte보다 큰값도 있으므로
        // 실제 값은 byte형을 충족하여도 오류가 뜬다
        // int형으로 충족시키고 싶다면 (byte)b2 를 기입하여야함
        System.out.println("b3 : " + b3);
        
        short s1 = 10;
        int i1 = s1; // promotion : 자동 형변환
        System.out.println("i1 : " + i1);

실수형

float 32비트(4byte)
double 64비트(8byte)
double d1 = 10.5;
       d1 = 5// 실수형의 저장장소가 정수형 저장장소의 크기보다 크다
        System.out.println("d1 : " + d1); // 5.0 출력
        
float f1 = (float)4.5// 또는
        float f11 = 4.5F;      // 로 입력해주어야한다.
        f1 = 5.1F;               // 왜냐하면 (float)또는 F를 생략하면 double로 읽기때문이다.
        System.out.println("f1 : " + f1); // 5.1 출력

실수형도 정수형과 마찬가지로 최소값과 최대값을 보고싶다면

데이터 타입 최소값 최대값
float Float.MIN_VALUE Float.MAX_VALUE
double Double.MIN_VALUE Double.MAX_VALUE

 

Boolean형

Boolean true 또는 false 출력
        boolean bu = true// true 또는 false
        boolean bu1 = false;
        System.out.println("bu : " + bu); // true 출력
        System.out.println("bu1 : " + bu1); // false 출력

 

char 형

char 16비트, 유니코드(0~65535) 출력
        char c1= 'a';
        char c11 = 'A';
        
        System.out.println("c1 : " + c1); // a 출력
        System.out.println("c11 : " + c11); // A 출력
        System.out.println((int)c1); // 97 출력
        System.out.println((char)97); // a 출력

(int)c1이 왜 97일까 ? (char)97이 왜 a 일까?

https://namu.wiki/w/%EC%95%84%EC%8A%A4%ED%82%A4%20%EC%BD%94%EB%93%9C

 

아스키 코드 - 나무위키

UTF-8의 경우 ASCII 영역은 그대로 1바이트를 사용하기 때문에 호환이 된다. 반대로 말하자면 UTF-8 문서라도 ASCII 영역에 해당하는 문자만 적혀 있고 BOM까지 없다면 그냥 ASCII 문서와 다를 게 없다. 하지만 UTF-16은 2바이트에서 시작하기 때문에 서로 호환이 되지 않는다. 이 때문에 UTF-16에서 ASCII 문자를 나타낼 때는 앞에 0x00이 붙는다. 예를 들어 A라는 글자를 표현하려면, ASCII나 UTF-8에서는 0x41이라

namu.wiki

해당 글을 참고하면 도움이 될 것 같다. 아스키 코드를 활용해서 hex 16진수와 octal 8진수 값도 한번 출력해보았다.

        // hex 16진수
        System.out.println(0xa); // 10 출력 
        System.out.println(0xf); // 15 출력
        // octal 8진수
        System.out.println(05); // 5 출력
        System.out.println(011); // 9 출력

위 나무위키 링크에 있는 값과 예시 출력 값을 비교하면 같은 것을 알 수 있다.

 

참조형데이터타입

기본형 데이터 타입을 제외한 데이터 타입

        String irum = "홍길동";
        // 어딘가의 주소해 홍길동이라는 이름이 있고 그것을  irum이 참조하는 것
        System.out.println(irum);

 

반응형

'JAVA > JAVA' 카테고리의 다른 글

6 - 클래스 ( class )  (0) 2020.03.03
5 - 배열(Arrary)  (0) 2020.03.03
4 - 조건문 if & switch  (0) 2020.03.03
3 - 반복문 for & while  (0) 2020.03.03
2 - 연산자  (0) 2020.03.03

+ Recent posts