Java 기초 #3

jjinny_0609·2023년 1월 31일
0

Java

목록 보기
3/31

어제 내용 정리

byte < short < int < long < float < double
 (1)    (2)    (4)    (8)    (4)      (8)
	    정수 타입	      |     실수 타입
* float는 표현범위가 더 크기 때문에 더 큰 타입으로 들어감.
  (정수와 소수까지 표현하기 때문에)

실수 연산에서의 자동 타입 변환

마찬가지로 작은타입(float)에서 큰타입(double)으로 변환하고 계산을 수행함.

  • 정수 + 실수는?
    정수 + 실수 : 정수를 실수로 변환하고 계산함
package ch02;

public class OperatorPromotionExample {

	public static void main(String[] args) {
		//		      실수(float)+실수(double) - 작은타입(float)에서 큰타입(double)으로 변환하고 계산을 수행함.
		double result = 1.2f + 3.4;

		//			정수 + 실수 - 정수(10)를 실수(10.0)로 변환하고 계산함 
		double result2 = 10 + 5.5;
		
		//			
//		int result3 = 10 + 5.5;
//		Type mismatch: cannot convert from double to float
//		10(int)+5.5(double)를 int에 저장하려고 하니 타입이 맞지않아서 오류 발생
//		해결방법 : 강제 형변환을 통해 타입을 변경하고 계산을 수행하도록 만들어주자. 
		int result3 = (int)(10 + 5.5);
	}

}

연산식에서 자동 타입 변환

int타입 보다 작은건 int로 변환해서 계산
int보다 큰 타입은 해당 타입을 따라서 계산

package ch02;

public class OperationPromotionExample {

	public static void main(String[] args) {
		byte byteValue1 = 10;
		byte byteValue2 = 20;
//		byte byteValue3 = byteValue1 + byteValue2;// int타입 보다 작은건 int로 변환해서 계산함
		
		int intValue1 = byteValue1 + byteValue2;	//첫번째 해결방법
		byte byteValue3 = (byte)(byteValue1 + byteValue2);	//두번째 해결방법
		System.out.println("intValue1 : "+intValue1);
		System.out.println("byteValue3 : "+byteValue3);
		
		char charValue1 = 'A';
		char charValue2 = 1;
//		char charValue3 = charValue1 + charValue2;
//		Type mismatch: cannot convert from int to char //int타입보다 작은건 int로 변환해서 계산함
//		65('A') + 1를 char타입에 저장하려고 하니 문제가 생김
		
		int intValue2 = charValue1 + charValue2;	//첫번째 방법
		char charValue3 = (char)(charValue1 + charValue2);	//두번째 방법
		System.out.println("intValue2 : "+intValue2);
		System.out.println("intValue2(char) : " +(char)intValue2);
		System.out.println("intValue3 : "+ charValue3);
		
		int intValue3 = 10;
		int intValue4 = intValue3/4;	// 10 / 4 = 2	int라 2만 남음 2.5를 담지못함
		int intValue4_1 = intValue3%3;	// 10 % 3 = 1	나머지
		double intValue5 = intValue3/4;	// 정수나누기 정수는 결과도 정수가 나옴(소수점전까지만 계산)
		
		System.out.println("intValue4 : " + intValue4);
		System.out.println("intValue4_1 : " + intValue4_1);
		System.out.println("intValue5 : " + intValue5);
		
		int intValue6 = 10;
		double intValue7 = intValue6 / 4.0;	//두개의 정수중에 하나를 실수로 만들면 실수나누기 실수가됨 
		
		System.out.println("intValue7 : " + intValue7);
		
		int x = 1;
		int y = 2;
		double result = (double)x/y;
		System.out.println("result : "+result);
	}
}

+연산에서의 문자열 자동 타입 변환

피연산자가 모두 숫자일 경우 -> 덧셈 연산 수행함
피연산자중 하나가 문자열일 경우 -> 나머지 피연산자도 문자열로 자동 변환함
괄호 먼저 계산

package ch02;

public class StringConcatExample {

	public static void main(String[] args) {
		// 숫자 연산
		int value = 10 + 2 + 8;
		System.out.println("value : "+value);
		
		// 문자열 결합 연산(+)
		//			  숫자 + 숫자 + 문자열
		//			  12 + "8" ->  "128"
		String str1 = 10 + 2 + "8";
		System.out.println("str1 : "+str1);
		
		//			  숫자 + 문자열 + 숫자
		//			  "10"+"2"+"8" -> "1028"
		String str2 = 10 + "2" + 8;
		System.out.println("str2 : "+str2);
		
		//			  문자열 + 숫자 + 숫자
		// 			  "10" + "2" + "8" -> "1028"
		String str3 = "10" + 2 + 8;
		System.out.println("str3 : "+str3);
		//			 문자열 + (숫자 + 숫자)
		//			  "10" + (10)
		//			  "10" + "10" -> "1010"
		String str4 = "10" + (2 + 8);
		System.out.println("str4 : "+str4);
		
		String str5 = "1" + (2 + 8) + 0;
		System.out.println("str5 : "+str5);
		
		String str6 = 3 + (4 + 2) + "7";
		System.out.println("str6 : "+str6);
		
		String str7 = 0 + "6"+ 0 +(3 + 6);
		System.out.println("str7 : "+str7);
	}
}

문자열을 기본 타입으로 강제 타입 변환

(자바스크립트에서 parseInt() 사용하듯)
문자열을 기본 타입으로 변환하는 경우 예를들어 "12"와 "3.5"를 정수 및 실수 타입으로 변환해서 숫자 연산을 하는 경우

  • 주의사항
    String은 기본타입이 아님, 참조형 타입!
    String str = (int)"10" + 5 ; << 이거 안됨!!!
속성	
변환 타입			사용 예
String -> byte		String str = "10";
					byte value = Byte.parseByte(str);
                    
String -> short		String str = "200";
					short value = Short.parseShort(str);
                    
String -> int		String str="300000"
					int value = Integer.parseInt(str);
                    
String -> long		String str = "12.345";
					long value = Long.parseLong(str);
                    
String -> float		String str = "12.345";
					float value = Float.parseFloat(str);
                    
String -> double	String str = "12.345";
					double value = Double.parseDouble(str);
                    
String -> boolean	String str = "true"
					boolean value = Boolean.parseBoolean(str);

ex)

package ch02;

public class PrimitiveAndStringConversionExample {

	public static void main(String[] args) {
			// String -> int
			int value1 = Integer.parseInt("10");
			// String -> double		
			double value2 = Double.parseDouble("3.14");
			// String -> boolean			
			boolean value3 = Boolean.parseBoolean("true");
			
			System.out.println("value1 : " + value1);
			System.out.println("value2 : " + value2);
			System.out.println("value3 : " + value3);
			
			// int -> String
			String str1 = String.valueOf(10);
			// double -> String
			String str2 = String.valueOf(3.14);
			// boolean -> String
			String str3 = String.valueOf(true);
			
			System.out.println("str1 : " + str1);
			System.out.println("str2 : " + str2);
			System.out.println("str3 : " + str3);
	}

}


변수와 시스템 입출력

모니터로 변수값 출력하기

=== console에 결과를 출력할떄 사용 ===
System.out.println() : 괄호 안의 내용을 출력하고 행을 바꿔라
System.out.print() : 괄호 안의 내용을 출력만 해라
System.out.printf() : 괄호 안의 첫 번째 문자열 형식대로 내용을 출력
=== 키보드로 값을 입력 ===
System.in.read()
Scanner

printf("형식문자열", 값1, 값2);
속성

형식화된 문자열		설명							출력 형태
정수	%d			정수								123
	%6d			6자리 정수, 왼쪽 빈 자리 공백		_ _ _123
	%-6d		6자리 정수, 오른쪽 빈 자리 공백		123_ _ _
	%06d		6자리 정수, 왼쪽 빈자리 0채움		000123

실수	%10.2f		소수점 이상 7자리, 소수점 이하 2자리. 왼쪽 빈 자리 공백	_ _ _ _123.45
	%-10.2f		소수점 이상 7자리, 소수점 이하 2자리. 오른쪽 빈 자리 공백123.45_ _ _ _
	%010.2f		소수점 이상 7자리, 소수점 이하 2자리, 왼쪽 빈자리 0채움	0000123.45

문자열 	%s		문자열							abc
		%6s		6자리 문자열, 왼쪽 빈 자리 공백		_ _ _ abc
		%-6s	6자리 문자열, 오른쪽 빈 자리 공백	abc _ _ _

특수 문자 \t		탭(tab)
		\n		줄 바꿈
		%%		%						%

ex)

package ch02;

public class PrintfExample {

	public static void main(String[] args) {
		int value = 123;
		System.out.printf(" 상품의 가격: %d원 \n", value);
		System.out.printf(" 상품의 가격: %6d원 \n", value);
		System.out.printf(" 상품의 가격: %d-6d원 \n", value);
		System.out.printf(" 상품의 가격: %06d원 \n", value);
		
		double area = 3.14159 * 10 * 10;
		System.out.printf("반지름이 %d인 원의 넓이:%10.2f\n", 10, area);
		//								10.2 소수 둘째자리까지 표현		
		String name = "홍길동";
		String job = "도적";
		System.out.printf("%6d | %-10s | %10s\n", 1, name, job);
		System.out.println("     "+1+" | "+name+"        |    " + "     "+job);
	}
}

키보드에서 입력된 내용을 변수에 저장하기

System.in.read();
// System.in.read(); 사용하려면 아래와 같이throws Exception를 추가해주어야함.

package ch02;

public class keyCodeExample {

	public static void main(String[] args) throws Exception{
		int keyCode;
		
		keyCode = System.in.read();		
		// Unhandled exception type IOException(처리되지 않은 예외 유형 IO 예외)
		// System.in.read(); 사용하려면 throws Exception를 추가해주어야함.
		System.out.println("keyCode : "+keyCode);
		
		keyCode = System.in.read();
		System.out.println("keyCode : "+keyCode);
		
		keyCode = System.in.read();
		System.out.println("keyCode : "+keyCode);
	}
}

키보드에서 입력된 내용을 문자열로 얻기

Scanner scanner = new Scanner(System.in); //생성된 scanner를 변수에 저장
//Scanner 변수선언 시스템의 입력장치로 부터 읽는 scanner 생성

String inputData = scanner.nextline(); //읽을 문자열을 String 변수에 저장
//String 변수 선언 enter키 이전까지 입력된 문자열을 읽음

  • 자바는 기본타입(byte, short, int, long, float, double, boolean)의 값이 동일한지 비교할 때에는 ==를 사용하고,
    문자열이(String)이 동일한지 비교할 때에는 equals() 메소드를 사용합니다.
package ch02;

import java.util.Scanner;

public class ScannerExample {
	public static void main(String[] args) throws Exception{
		Scanner s = new Scanner(System.in);
		String inputData;
		
		while(true) {
			inputData = s.nextLine();	 
			System.out.println("입력된 문자열: \""+inputData+"\"");
			// 		 						" " 표시를 위해 작성됨
			// 만약에 사용자가 입력한 값이 q이면
			if(inputData.equals("q")) {
				// 반복문을 종료해라~
				break;
			}
		}
		System.out.println("종료");
	}
}

profile
뉴비 개발자 입니다. velog 주소 : https://velog.io/@jjinny_0609 Github 주소 :

0개의 댓글