첫날에는 자바를 배웠는데 간단한 프린트 부터 배웠습니다.
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은 자동으로 줄바꿈을 해주고요.
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.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
이 나옵니다
간만에 첫 수업때 내용을 보니 예전 생각도 나고 확실한 복습이 되어 쉽게 잊지 못할거 같네요.