Chap01

박성호·2024년 3월 28일
0

JAVA복습

목록 보기
1/4

첫날에는 자바를 배웠는데 간단한 프린트 부터 배웠습니다.


public class Hello {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("Hello, Java");		
		System.out.println(3+3+"a"+3+3+"b"+2+2+2+2);
		float v1=0.1f;
		double v2=0.1;
		System.out.println(v2==(double)v1);
		
	}

}

출력:
Hello, Java
6a33b2222
false

여기서 출력단에서 살펴볼점은 println안에 숫자+문자열= 문자열로 출력되는 겁니다. 반대로 문자열을 제거하면 출력은: 20 이 나옵니다.

그리고 v2의 값과 v1의 값을 비교해보면 둘다 0.1로 같은 값으로 생각할 수 있지만 컴퓨터는 이를 다르게 생각합니다. float은 4바이트(32비트)를 사용하여 부동 소수점을 저장하고 double은 8바이트(64비트)를 사용하여 저장합니다. double타입은 float보다 더 큰 범위의 수를 저장할 뿐 아니라 수를 정밀하게 표현할 수 있습니다.

다음 내용을 보겠습니다.


public class Hello02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a;
		a=3;
		int b=2;
		int c=a+b;
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
//		"sysout" Ctrl + space +Enter 하면 
//		System.out.println(); 출력 		
	}

}

이때는 변수 선언을 하는 여러 방법을 배운것 같습니다.

마지막 내용은


public class Menu {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*
		 * 카페메뉴어플 출력
		 *  ctrl + shift + 'c' , ctrl + '/' 로 라인 주석 가능
		 */
		String area = "서울";
		String loc = "강남";
		System.out.printf("나는 %s안 %s에 삽니다\n",area,loc);
		System.out.println("Cafe Management Application");
		System.out.println("Cafe Management Beta");
		//println은 값을 하나만 받을수 있다 println(a,b,c);는 불가능 println(a+b);는 가능하다
		//printf("속성"a,b,c,);는 가능하다 printf는 println과 다른 결이다
//		모든 실행문은 ';'으로 끝나야 한다.
//		'}' 뒤에는 ';' 을 붙이지 않는다.

	}

}

출력:
나는 서울안 강남에 삽니다
Cafe Management Application
Cafe Management Beta

println이 아닌 printf를 활용하여 출력하는 방법입니다.
printf를 사용하면 내가 지정하는 format에 맞춰 출력을 합니다 얘를 들어 나는 ("나는 %s안 %s에 삽니다\n",area,loc) 라는 내용으로는 각 %s안에 순서 대로 area, loc 값이 들어 갑니다. 마지막으로 \n을 넣어 주면 줄을 바꿔 줍니다.
println은 자동으로 줄바꿈을 해주고요.

sub1

public class sub1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner fNum =new Scanner(System.in); //Scanner 뒤에 글자는 변수이므로 임의로 설정가능
		Scanner sd =new Scanner(System.in);
		Scanner tn =new Scanner(System.in);
		Scanner fw =new Scanner(System.in);
		Scanner sw =new Scanner(System.in);
		
		
		String str1 = fw.nextLine(); //for String
		String str2 = sw.nextLine(); 
		int f = fNum.nextInt(); //for Integer
		float s = sd.nextFloat(); //only for Float
		int t = tn.nextInt();
		int sum=t+f;
		System.out.println(f+s-t);
		System.out.printf("%2.3f\n",f*s-t);
		System.out.print(f+","+s+"\n"); //이런식으로 쓰면 f,s를 출력 가능
		System.out.println((f+t)+","+(f*t)+","+(f/t)); //각 괄호안에 계산 출력 가능 printf는 (%d,변수) 이런식으로 문장에 형식을 맞춰야함
		System.out.printf("%9d\n",f/s);
		System.out.printf("\t%o\n",f*t);
		System.out.printf("\t%d",sum);
		
		
		System.out.printf("%s\n",str1+" "+str1+" "+str1);
		System.out.printf("%s:%s\n",str1,str2);
		System.out.printf("%s:%d\n",str1,sum);//문자열이 중간에 들어가면 3+5를 했을때 35가 나옴
		System.out.printf("%s:%d\n",str1,sum);
		System.out.println(str1+":"+sum);
		
		

	}

입력:
A
B
10
5
2
출력:
13.0
48.000
10,5.0
12,20,5
Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.Float
at java.base/java.util.FormatterFormatSpecifier.failConversion(Formatter.java:4515)atjava.base/java.util.FormatterFormatSpecifier.failConversion(Formatter.java:4515) at java.base/java.util.FormatterFormatSpecifier.printInteger(Formatter.java:3066)
at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:3021)
at java.base/java.util.Formatter.format(Formatter.java:2791)
at java.base/java.io.PrintStream.implFormat(PrintStream.java:1367)
at java.base/java.io.PrintStream.format(PrintStream.java:1346)
at java.base/java.io.PrintStream.printf(PrintStream.java:1245)
at sub1.main(sub1.java:26)

다음 과 같은 에러가 나옵니다
에러가 나온 이유는 at sub1.main(sub1.java:26) 이부분 인데요
System.out.printf("%9d\n",f/s);
이걸 살펴보면 %9d라고 써있는데 9는 아홉자리를 표현하라는 뜻이고 d는 dicimal 10진수 정수를 표현하는 것 입니다. 정근데 저희는 위에 s의 값을 float으로 저장했기 때문에 이 정수와 실수의 계산결과는 실수 이기에 이를 정수 형으로 표현해서 에러가 나오는 것 입니다.
코드를 ("%9f\n",f/s);로 수정하면
입력:
A
B
10
5
2
출력:
13.0
48.000
10,5.0
12,20,5
2.000000
24
12A A A
A:B
A:12
A:12
A:12
이 나옵니다
간만에 첫 수업때 내용을 보니 예전 생각도 나고 확실한 복습이 되어 쉽게 잊지 못할거 같네요.

profile
꾸준히 성장하는 개발자

0개의 댓글