import java.util.*을 사용함으로써 scan을 사용할 수 있는데

이는 사용자가 키보드로 수치를 입력할 수 있다.

정수형이면 scan.nextInt()

실수형이면 scan.nextFloat()를 사용한다.

근데 아래의 출력을 보면

마지막 str1을 입력하지 않았는데 자동으로 Hello와 World 잘려서 바로 출력됨을 알 수 있다.

import java.util.*;
public class ScannerTest {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("정수를 입력하세요:");
        int num =scan.nextInt();
        System.out.println("num = " + num);
        
        System.out.print("실수를 입력하세요:");
        float f = scan.nextFloat();
        System.out.println("f = " + f);

        System.out.print("문자를 입력하세요:");
        String str = scan.next();
        System.out.println("str = " + str);

        //scan.nextLine();//버퍼비우기(스트림 비우기)

        System.out.print("문자를 입력하세요:");
        String str1 = scan.next();
        System.out.println("str1 = " + str1);
    }
}

 

 

이에 대한 원인으로

scan.next();
공백을 기준으로 한 단어 또는 한 문자씩 입력받는다.
버퍼에 입력된 문자나 문자열에서 공백 전까지의 단어를 읽는다.

 

scan.nextLine();
문자 또는 엔터를 치기 전까지의 문장 전체를 입력받는다.
버퍼에 입력된 문자열을 개행 문자까지 다 가져온다.

따라서 이 문제점을 scan.nextLine();을 사용함으로서 문제를 해결할 수 있다.

앞에 Hello가 출력되고 나서 그 다음 버퍼에 World가 출력되어야 하는데

scan.nextLine(); 을 사용하여 버퍼를 비울 수 있기 때문이다.

import java.util.*;
public class ScannerTest {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("정수를 입력하세요:");
        int num =scan.nextInt();
        System.out.println("num = " + num);
        
        System.out.print("실수를 입력하세요:");
        float f = scan.nextFloat();
        System.out.println("f = " + f);

        System.out.print("문자를 입력하세요:");
        String str = scan.next();
        System.out.println("str = " + str);

        scan.nextLine();//버퍼비우기(스트림 비우기)

        System.out.print("문자를 입력하세요:");
        String str1 = scan.next();
        System.out.println("str1 = " + str1);
    }
}

 

 

이번에는 또 다른 문제가 생겼다.

Hello World를 출력하고 싶은데 앞에 Hello만 잘려서 나온 것이다.

왜냐하면 위에 설명한 것 처럼

그냥 next는 공백을 기준으로 잘라서 출력하고

Line을 이어서 붙어 주어야만 엔터를 했을 때를 기준으로 출력하기 때문이다.

import java.util.*;
public class ScannerTest {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("정수를 입력하세요:");
        int num =scan.nextInt();
        System.out.println("num = " + num);
        
        System.out.print("실수를 입력하세요:");
        float f = scan.nextFloat();
        System.out.println("f = " + f);

        System.out.print("문자를 입력하세요:");
        String str = scan.next();
        System.out.println("str = " + str);

        scan.nextLine();//버퍼비우기(스트림 비우기)

        System.out.print("문자를 입력하세요:");
        String str1 = scan.nextLine();
        System.out.println("str1 = " + str1);
    }
}

 

 

public class TwoDimArrayInit {
    public static void main(String[] args) {
        int[][] a = {
                {1,2,3,4},
                {5,6,7,8}
        };

        for(int i=0; i<a.length ; i++){
            for(int j=0;j<a[i].length; j++){
                System.out.print(a[i][j] + "\t");
            }
            System.out.println();
        }

        int[][] b = new int[5][];
        b[0] = new int[1];
        b[1] = new int[2];
        b[2] = new int[3];
        b[3] = new int[4];
        b[4] = new int[5];

        for(int i=0; i<b.length ; i++){
            for(int j=0;j<b[i].length; j++){
                b[i][j] = '*';
                System.out.print((char)(b[i][j]) + "\t");
            }
            System.out.println();
        }
    }
}

Movie 타입의 객체를 저장할 수 있는 배열 m을 생성

 

  • Movie[] m = new Movie[3];로 배열을 생성한 후, 각 배열 요소에 대해 new Movie()로 객체를 생성하여 초기화

※Movie라는 만들어진 객체의 정보를 가져와 m이라고 이름을 지정하여 3개로 만들었기에

각각의 속성에 접근하기 위해서 m[0], m[1], m[2]를 각각 모두 초기화 해주어야함

  • 각각의 Movie 객체에 대해 여러 속성에 값을 할당하고, 마지막으로 이를 출력하여 각 영화의 정보 보여줌

 

import java.sql.SQLOutput;

public class ObjectArrayExam {
    public static void main(String[] args) {

        Movie[] m = new Movie[3];

        m[0] = new Movie();
        m[0].mtitle = "A영화";
        m[0].mmajor = "박매일";
        m[0].mtime = 160;
        m[0].mlevel = 15;
        m[0].mday = "2023-01-15";

        m[1] = new Movie();
        m[1].mtitle = "B영화";
        m[1].mmajor = "나길동";
        m[1].mtime = 180;
        m[1].mlevel = 12;
        m[1].mday = "2023-01-11";

        m[2] = new Movie();
        m[2].mtitle = "C영화";
        m[2].mmajor = "조길동";
        m[2].mtime = 140;
        m[2].mlevel = 18;
        m[2].mday = "2023-11-16";

        for(int i=0 ; i<m.length ; i++){
            System.out.println(m[i].mtitle+"\t"+m[i].mmajor+"\t"+m[i].mtime+"\t"+m[i].mlevel+"\t"+m[i].mday);
        }
    }
}

 

 

 

+ Recent posts