자바 초보에서 알고리즘 B형까지 도전기1 -입력과 출력 필수지식-

1. 문자열 출력

 

반드시 작은 따옴표가 아닌 큰 따옴표를 사용해야함

 

 

 

2. 문자열 안에 특수문자 사용

 

문자열은 "" 안에 있는 부분인데, 이러한 문자열 안에 ","을 포함시키고 싶다면 어떻게 해야할까?

 

python과 마찬가지로 대부분의 특수문자에 \을 붙여주면 해당 문자를 실제 그 문자로 인식

 

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        System.out.print("He says \"It\'s a really simple sentence\".");
    }
}

He says "It's a really simple sentence".

 

 

3. 줄바꿈 출력

 

System.out.println(); 을 사용하거나 System.out.print("\n");을 사용

 

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        System.out.print("Hello");
        System.out.println();
        System.out.print("World");
    }
}

Hello
World

 

4. 출력에 공백 추가

 

3 5를 출력하고 싶다면 System.out.println("3 5");도 가능하지만 중간에 " "을 더해주는 방식도 가능하다

 

System.out.println(3 + " " + 5);

 

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        System.out.println(3 + " " + 5);
    }
}

3 5

 

 

5. 포맷팅

 

두개의 변수 선언은 int a = 97, b = 13;으로 한줄에 가능하다.

 

여기서 97과 13을 저장한 변수만을 이용해서 "97 - 13 = 84"를 출력하라고 한다면?

 

System.out.printf를 이용해 문자열 포맷팅이 가능하다.

 

문자열 내에 해당 변수 타입에 해당하는 포맷을 적고 (정수 = %d, 문자열 = %s, 문자 = %c, 실수 = %f)

 

문자열 이후에는 필요한 변수를 몇개든지 순서대로 나열하면 된다.

 

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        int a = 97, b = 13;
        int c = a-b;

        System.out.printf("%d - %d = %d",a,b,c);
    }
}

97 - 13 = 84

 

printf가 쓰기 싫다면... 그냥 a,b를 이용해서... 해당 변수와 + 연산자를 이용해 이어주면 된다

 

이걸 전혀 생각을 못했네;;

 

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        int a = 97, b = 13;

        System.out.println(a + " - " + b + " = " + (a-b));
    }
}

97 - 13 = 84

 

6. 자바에서 자주 쓰는 자료형

 

정수 : int, long

 

실수 : double

 

문자 : char

 

문자열 : String

 

정수형, 실수형에 해당하는 변수들끼리는 사칙연산(+, - , *, /)이 가능

 

문자열과 변수끼리 덧셈하면 변수를 문자열로 생각해서 그대로 이어줌

 

 

7. 소수점 자리 맞춰 출력하기

 

실수값을 갖는 변수는 System.out.printf() 함수에서 %.?f의 형태로 포맷팅하여 소수점 ?째자리까지 반올림하여 출력할 수 있다.

 

예를 들어 다음은 a를 소수 5째자리에서 반올림하여 4째자리까지 출력하는 경우이다.

 

public class Main {
    public static void main (String args[]) {
        double a = 33.567268;
        System.out.printf("%.4f", a);
    }
}

33.5673

 

 

8. 두 변수 값 교환하기

 

python에서는 a,b = b,a로 쉽게 교체했지만... 다른 언어에서는 불가능하다

 

temp라는 임시 변수를 활용해서 a값을 temp에 넣어주고, a에 b를 넣어준 다음에 b에 temp(a값)을 넣어준다

 

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        int a = 3, b = 5;

        int temp;

        temp = a;
        a = b;
        b = temp;

        System.out.println(a);
        System.out.println(b);
    }
}

5
3

 

 

잘 이용해보면 세 값 a,b,c를 적절하게 교환하는 것도 가능하다

 

b에 a값을, c에는 b값을, a에는 c값을 넣는 프로그램

 

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        int a = 5, b = 6, c = 7;

        int temp;

        temp = b;
        b = a;
        a = c;
        c = temp;

        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
    }
}

7
5
6

 

9. 변수 값을 동시에 복사하기

 

a = b = c를 하면 c에 있는 값을 a,b에 동시에 넣어줄 수 있다

 

이건 python만 가능한게 아니라 java, c, c++ 모두 가능하더라고

 

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        int a = 1, b = 2, c = 3;

        a = b = c;

        System.out.println(a + " " + b + " " +c);
    }
}

3 3 3

 

10. 공백을 사이에 둔 입력

 

만약 13 17같이 한줄에 공백을 두고 2개의 정수가 입력으로 들어온다면?

 

한줄로 받아서 자르는 방법이 물론 있겠지만...(아직 배우진 않았다)

 

Scanner의 nextInt()는 공백단위로 입력을 받아주어서, 2개의 정수형 변수 각각에 nextInt();를 사용하면 된다

 

즉 int a = sc.nextInt();, int b = sc.nextInt();를 차례대로 수행하면 각각 a = 13, b = 17이 들어온다

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // a b로 들어오는 정수 입력을 받는 방법

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();
        int b = sc.nextInt();

        System.out.println(a*b);


    }
}

13 17
221

 

11. 2개의 줄에 걸친 입력 받기

 

java에서는 sc.nextInt()로 입력받으면, 줄바꿈 \n 역시 공백과 마찬가지로 입력에서 무시된다.

 

그래서 두 줄에 걸쳐 입력 받는 경우에도, 공백이 있는 한줄 입력과 마찬가지로 

 

2개의 변수 각각에 nextInt()를 넣어주면 된다

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();
        int b = sc.nextInt();

        System.out.println(a*b);
    }
}

34
63

2142

 

12. 문자 1개를 입력받는 방법

 

자바에서는 문자 1개만 입력받을 수는 없다

 

자바는 항상 문자열 단위로 입력받는다.

 

문자열 타입은 String으로 sc.next()로 입력받는다.

 

이렇게 입력받은 문자열 s에서 첫번째 문자는 s.charAt(0)로 조회가 가능하며

 

이러한 과정으로 char 타입의 문자로 변환이 가능하다.

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        Scanner sc = new Scanner(System.in);
        
        //char c = sc.next().charAt(0);

        String s = sc.next();

        char c = s.charAt(0);

        System.out.println(c);
    }
}

A
A

 

 

String s = sc.next();

char c = s.charAt(0);

 

줄여서 char c = sc.next().charAt(0);으로도 사용할 수 있을 것이다.

 

 

13. 특정 문자를 사이에 둔 입력을 잘라서 받는 방법

 

두 수가 공백이 아닌 특정 문자를 사이에 두고 입력에 들어온다면, 

 

다음과 같이 sc.useDelimiter(특정 문자)를 이용할 수 있다.

 

delimeter이 아니고 delimiter이더라... 원래 이거였나..?;;;

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // h:m으로 입력이 주어지는 경우...

        Scanner sc = new Scanner(System.in);

        sc.useDelimiter(":"); //:를 기준으로 잘라서 입력받기

        int h = sc.nextInt();
        int m = sc.nextInt();

        System.out.println((h+1)+ ":" + m);
    }
}

1:59

2:59

 

위와 같은 경우 하나의 문자열 h:m이 h,m 2개로 이루어져 있어서 다행이지만

 

하나의 문자열이 매우 많은 구성성분으로 이어진 경우, 변수를 일일이 모두 작성해줄 수가 없다

 

그런 경우 String s = sc.next()로 하나의 문자열을 받고,

 

s.split(특정문자)로 특정문자 기준으로 잘라서 각 문자를 원소로 가지는 String 배열을 얻을 수 있다

 

import java.util.Scanner;

public class Main {
    public static void main (String args[]) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String[] strArr = s.split(":");
        System.out.println(strArr[0] + "\n" + strArr[1]);
    }
}

50:60

50
60

 

 

1994.5.24를 .을 기준으로 나눠서 입력받을려면 어떻게 해야할까?

 

sc.useDelimiter(".");으로 하면 될것 같은데... 이렇게 하면 에러나더라고..?

 

 

토론장 답변 보니까

 

"useDelimiter안의 값은 정규 표현식을 사용하는데 정규 표현식에서 "."은 '모든 단어'와 같은 의미를 가지고 있어서 오류가 발생한다. 

 

만약 "."을 기준으로 나누고 싶다면 "\\."을 이용해야한다.

 

".", "^", "$", "*" 같은 문자는 정규표현식에서 다른 뜻을 가지고 있어서 \\을 붙여줘야한다."

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.

        Scanner sc = new Scanner(System.in);

        sc.useDelimiter("\\.");

        int y = sc.nextInt();
        int m = sc.nextInt();
        int d = sc.nextInt();

        System.out.println(m + "-" + d + "-" + y);
    }
}
TAGS.

Comments