고래씌

[JAVA] 1-3. Scanner 클래스 본문

JAVA/JAVA 기초

[JAVA] 1-3. Scanner 클래스

고래씌 2023. 9. 27. 12:26

1. 자바의 특징

1) 운영체제에 독립적
2) 사용하기 쉬운 언어
    - 다른 언어의 단점 보완(포인터, 메모리 관리)
    - 객체 지향 언어
    - 능률적이고 명확한 코드 작성 가능
3) 자동 메모리 관리(Garbage Collection)
4) 네트워크와 분산환경 지원
5) 멀티쓰래드 지원
6) C언어와 달리 메모리를 동적할당
 

2. JVM? 

자바를 실행하기 위한 가상 기계로 플랫폼에 의존적. byte code(class 파일)을 해석하고 실행하는 interpreter
자바 프로그램 실행환경을 만들어 주는 소프트웨어
 
2-1. JRE, JDK?
JDK는 자바 애플리케이션을 개발하기 위한 환경을 지원한다. JDK는 JRE를 포함할 뿐만 아니라 컴파일러(javac), javadoc, jar, API, JVM, 유틸리티 등 개발에 유용한 도구들을 포함함

JRE는 컴파일된 Java코드를 실행하는데 필요한 요소들을 제공함. 즉, Java 어플리케이션을 실행하는 데 사용되지만 개발도구는 포함되어 있지않음.
 

3. 기본자료형의 종류 및 대표자료형?

기본 자료형 (primitive data type)

  • 논리형 : boolean   1byte
  • 문자형 : char   2byte
  • 정수형 : byte    1byte, short  2byte, int   4byte, long   8byte
  • 실수형 : float  4byte, double    8byte

대표자료형 - int, double

  • 문자열 : String  참조자료형

4. 변수 명명 규칙

1) 대소문자 구분. 길이 제한 X
2) 예약어 사용 X
3) 숫자로 시작 X
4) 특수문자는 '_' 와 '$'만을 허용함
5) 여러 단어 이름은 단어의 첫 글자를 대문자로 한다. 단, 첫 시작 글자는 소문자로 하는 것이 관례이다.
낙타등표기법 - 변수명을 직관적으로 알아볼수있게 쓰는데 단어를 붙여쓸때 각 단어의 첫글자를 대문자로 쓰지만 변수의 맨처음 글자는 소문자로 씀
 

1. Scanner 

사용자가 입력한 값을 문자열로 받아오는 메소드 : next(), nextLine()
[사용법] : 변수 선언과 동시에 값을 입력받아 바로 대입
next() : 사용자가 입력한 값중 공백(스페이스바)이 있을 경우 공백 이전까지만 출력해줌
nextLine() : 사용자가 입력한 값 중 개행문자(\n)가 있을 경우 공백에 무관하게 개행문자 이전까지만 출력해준다.
                   남아있는 개행문자(\n)를 날려버린다
                   사용자가 입력한 값에 공백이 포함될 여지가 있는경우 nextLine을 사용할 것.
nextInt() : 숫자(int형) 을 출력해줌
nextDouble() : 숫자(double형)을 출력해줌
 
□  문자열로 뽑을때 => sc.nextLine() / sc.next()
 정수값으로 뽑을때 => sc.nextInt() / sc.nextByte() /sc.nextShort() / sc.nextLong()
 실수값으로 뽑을때 => sc.nextDouble() / sc.nextFloat()

 문자를 뽑을 때 => sc.nextChar() xxxxxx 이런거 없음!
 
nextInt()nextDouble()뒤에 남아있는 개행문자를 날리지않음. (nextLine()은 개행문자 날림)
=> 그래서 입력 버퍼공간에 남아있는 엔터값(\n)을 비워주기 위해서 String 입력값을 받기 전에 nextLine()을 한번 써준다!!!!
※ 다음 nextLine()을 사용할 경우 앞에 개행문자를 남겨주면 안됨 -> 에러발생
 

package com.kh.run;

import com.kh.variable.*;   // *을 이용하면 모든게 input됨. com.kh.variable 아래에 있는 모든 것을 모두 input하겠다

public class VariableRun {
	
	public static void main(String[] args) {
		//crtl + shift + o : 필요한 클래스 자동 임포트.
//		A_Variable av = new A_Variable();
		//av.printVariable();
		//av.declareVariable();
//		av.initVariable();
		B_KeyboardInput bk = new B_KeyboardInput();
		bk.inputTest1();
	}

}
package com.kh.variable;

import java.util.Scanner;

// 사용자가 키보드로 입력한 값을 변수에 기록하는 방법
public class B_KeyboardInput {
	public void inputTest1() {
		/*
		 * 자바에서 제공하고 있는 java.util.Scanner 클래스를 이용할 것(api)
		 * Scanner 클래스 안에 이미 만들어져있는 메소드를 호출해서 사용
		 * 
		 */
		Scanner sc = new Scanner(System.in); // 자바 시스템 내부에 입력을 받겠다
		
		// 사용자의 인적사항 입력받기(이름, 나이, 키)
		System.out.print("당신의 이름은 무엇입니까 : ");
		
		/*
		 * 사용자가 입력한 값을 문자열로 받아오는 메소드 : next(), nextLine()
		 * 사용법 : 변수 선언과 동시에 값을 입력받아 바로 대입
		 * String name = sc.next();
		 * next() : 사용자가 입력한 값중 공백(스페이스바)이 있을 경우 공백 이전까지만 출력해줌
		 * nextLine() : 공백을 무시하고 모두 출력해줌
		 */
		
		
		// String name = sc.next();
		String name = sc.nextLine(); // 사용자가 엔터를 누르기 전까지 대기상태에 빠져있다
		/*
		 * nextLine() : 사용자가 입력한 값 중 개행문자(\n)가 있을 경우 공백에 무관하게 개행문자 이전까지만 출력해준다.
		 *              남아있는 개행문자(\n)를 날려버린다.
		 *              사용자가 입력한 값에 공백이 포함될 여지가 있는경우 nextLine을 사용할 것.
		 */
		
		System.out.print("당신의 나이는 몇 살입니까 : ");
		int age = sc.nextInt(); // 사용자가 입력한 값을 정수형(int)로 받을 때 사용
		
		System.out.print("당신의 키는 몇 cm입니까: ");
		double height = sc.nextDouble();
		
		sc.nextLine(); // 입력 버퍼공간에 남아있는 엔터값(\n)을 비워주기위해서 실행
		
		System.out.print("다신이 사는 곳은 어디입니까 :");
		String address = sc.nextLine();   // 위에 sc.nextLine()을 입력해주지 않으면 에러발생함
		
		System.out.println(address+ "에 사는, " + name +"씨의 나이는" + age + "세이며 키는 " + height + "cm 입니다.");

		
	}

}

 

2-1. charAt

	public void inputTest2() {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("이름 : " );
		String name = sc.nextLine();
		
		System.out.print("성별(M/F) : ");
		String gender = sc.nextLine();
		char newGender = gender.charAt(0);
		// "MALE"문자열
		// cahrAt(뽑고자하는 문자의 위치) : String클래스 내부에 존재하는 일반메소드로 문자열에서
		//							 내가 뽑고자하는 위치의 문자를 반환해줌
		// charAt(1)을 하면 문자열의 두번째 있는 입력값만 반환됨
		
		
		// 000님의 성별은 X입니다.
		System.out.println(name + "님의 성별은 " + newGender + "입니다");

 
※ 정리1. 콘솔창에 값을 출력하기 위해서는 : System.out.print[ln]() 메소드 이용2.
               콘솔창에 값을 입력받기 위해서는 : Scanner를 이용해서 (nextXXX() 메소드 이용)
 
   > 주의사항   
1) sc.nextXXX() 메소드 뒤에 sc.nextLine() 메소드가 와야할 경우     
sc.nextLine() 메소드를 한번 더 실행시켜줘서 입력버퍼에 남아있는 엔터를 빼줘야 함   
2) '문자' 값을 입력받아야 할 경우       
sc.nextLine() 메소드를 통해 우선 문자열(String)형태로 입력받고, 그 뒤에 .charAt(인덱스위치) 메소드를 통해 원하는       위치의 문자 하나만 추출한다.
 

3-1. 실습문제 1

Q. 이름, 성별, 나이, 키를 사용자에게 입력 받아 각각의 값을 변수에 담고 출력하세요.
출력문 : 키 180.5cm인 20살 남자 이무개님 반갑습니다 ^^

package com.kh.practice1.func;

import java.util.Scanner;

public class VariablePractice1 {
	
	public void test1() {
		// 이름, 성별, 나이, 키를 사용자에게 입력 받아 각각의 값을 변수에 담고 출력하세요.
		// 키 180.5cm인 20살 남자 이무개님 반갑습니다 ^^
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("이름을 입력하세요 : ");
		String name = sc.next();
		
		sc.nextLine();
	
		System.out.print("성별을 입력하세요 : ");
		char gender = sc.nextLine().charAt(0);
		
		System.out.print("나이를 입력하세요 : ");
		int age = sc.nextInt();
		
		System.out.print("키를 입력하세요 : ");
		double height = sc.nextDouble();
		
		System.out.println("키 " + height + "인 " + age + "살 " + gender + name + "님 반갑습니다 ^^");
		
	}

}
package com.kh.practice1.run;

import com.kh.practice1.func.VariablePractice1;

public class Run {

	public static void main(String[] args) {
		VariablePractice1 vp1 = new VariablePractice1();
		vp1.test1();

	}

}

 

3-2. 실습문제 2

Q. 키보드로 정수 두개를 입력 받아 두 수의 합, 차, 곱, 나누기한 몫을 출력하세요.
 

package com.kh.practice1.func;

import java.util.Scanner;

public class VariablePractice2 {
	
	public void test2() {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("첫 번째 정수: ");
		int oneInt = sc.nextInt();
		
		System.out.print("두 번째 정수 : ");
		int twoInt = sc.nextInt();
		
		System.out.println("더하기 결과 : " + (oneInt + twoInt));
		System.out.println("빼기 결과 : " + (oneInt - twoInt));
		System.out.println("곱하기 결과 : " + (oneInt * twoInt));
		System.out.println("나누기 결과 : " + (oneInt / twoInt));
		
	}
}

 

3-3. 실습문제 3

Q. 키보드로 가로, 세로, 값을 실수형으로 입력 받아 사각혀으이 면적과 둘레를 계산하여 출력하세요.

package com.kh.practice1.func;

import java.util.Scanner;

public class VariablePractice3 {
	
	public void test3() {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("가로 : ");
		double width = sc.nextDouble();
		
		System.out.print("세로 : ");
		double length = sc.nextDouble();
		
		System.out.println("면적 : " + (width * length));
		System.out.println("둘레 : " + ((width+length)*2));
		
	}

}

3-4. 실습문제 4

Q. 영어 문자열 값을 키보드로 입력 받아 문자에서 앞에서 세 개를 출력하세요.

package com.kh.practice1.func;

import java.util.Scanner;

public class VariablePractice4 {
	
	public void test4() {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("문자열을 입력하세요 : ");
		String text = sc.nextLine();
		char oneText = text.charAt(0);
		char twoText = text.charAt(1);
		char threeText = text.charAt(2);
	
	
		System.out.println("첫 번째 문자 : " + oneText );
        // System.out.println("첫 번째 문자 : " + text.charAt(0);
		System.out.println("두 번째 문자 : " + twoText );
		System.out.println("세 번째 문자 : " + threeText );
				
	}

}