Ex1) [내 이름 출력하기] - 입출력
import java.util.Scanner;
public class ex1 {
public static void main(String[] args){
Scanner scanner =new Scanner(System.in);
System.out.print("이름을 입력하세요.");
String str = scanner.nextLine();
System.out.println("입력하신 이름은 " + str + " 입니다.");
}
}
scanner 객체를 생성하여 String str 변수에 nextLine() 으로 사용자로부터 입력을 받고 출력하였다.
Ex2) [아이유 프로필 출력하기] - 변수
public class ex2 {
public static void main(String[] args){
String str = "아이유";
int age = 30;
boolean stu = true;
double weight = 40.5;
long money = 10000000000L;
System.out.println("이름 : "+str+" ");
System.out.println("나이 : "+age+" ");
System.out.println("대학생인가요? : "+stu+" ");
System.out.println("몸무게 : "+weight+" ");
System.out.println("재산 : "+money+" ");
}
}
이름은 String
나이는 int
참 거짓은 boolean
몸무게는 double
재산은 long
여기서, println 구문에서 변수와 일반 문자열을 같이 출력하는 방법을 알게 되었다.
또한 long 변수형에서는 끝에 L 을 꼭 넣어서 구분해주어야한다.
Ex3) [((10 + 5) x 3) ÷ 5의 값을 7로 나눈 나머지를 구하시오.] - 연산자
Ex4) [++ , --] - 연산자
8
5
3
5
8
6
2
5
으로 출력될 것이다.
위의 네줄과 아래의 네줄의 출력이 다른 이유는, a 와 d 에서는 전위형 이므로 값이 참조되기 전에 증가 (또는 감소)시킨다.
b와 c 에서는 후위형 이므로 참조된 후에 증가(또는 감소)하므로, 위와 같은 결과가 나올 것이라고 예측하였다.
Ex5) [보너스 3등분하기] - 형변환
import java.util.Scanner;
public class ex3 {
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
System.out.print("보너스 금액을 입력하세요.");
int s = scanner.nextInt();
System.out.println("3등분된 보너스 금액은 " + (double)s/3 + "원 입니다.");
}
}
s 라는 변수는 int 형이다. 거기에 입력을 받았기 때문에 출력을 할때도 소수점이 출력되지 않는 정수형으로 출력이 되어야 하지만, (double) 을 통해 형변환을 하여 소수점이 출력되도록 하였다.
Ex6) [이게 3의 배수 일까요?] - 조건문
import java.util.Scanner;
public class ex4 {
public static void main(String[] args) {
int a = 0;
System.out.print("3의 배수인지 판단하고 싶은 숫자를 입력하세요.");
Scanner scanner = new Scanner(System.in);
a = scanner.nextInt();
if (a % 3 == 0) {
System.out.print("3의 배수입니다.");
} else {
System.out.println("3의 배수가 아닙니다.");
}
}
}
a라는 변수에 숫자를 입력받고, 조건문을 통해 3의 배수인지 아닌지를 판별하도록 하였다.
a % 3 이라는 조건은 a 를 3으로 나누었을 때의 나머지를 반환한다.
따라서 비교연산자를 이용하여 그 값이 0 이라면 3의 배수이고, 아니라면 3의 배수가 아닌 것이다.
몇 기인지 입력해주세요.
3
HTML 과목 점수를 입력해주세요.
60
CSS 과목 점수를 입력해주세요.
80
Javascript 과목 점수를 입력해주세요.
65
불합격입니다.
전체 과목 중 최고점은 80점입니다.
전체 과목 중 최저점은 60점입니다.
전체 과목의 평균은 68.33333333333333점입니다.
몇 기인지 입력해주세요.
2
HTML 과목 점수를 입력해주세요.
63
CSS 과목 점수를 입력해주세요.
82
Javascript 과목 점수를 입력해주세요.
68
합격입니다.
전체 과목 중 최고점은 82점입니다.
전체 과목 중 최저점은 63점입니다.
전체 과목의 평균은 71.0점입니다.
몇 기인지 입력해주세요.
3
HTML 과목 점수를 입력해주세요.
100
CSS 과목 점수를 입력해주세요.
100
Javascript 과목 점수를 입력해주세요.
0
합격입니다.
전체 과목 중 최고점은 100점입니다.
전체 과목 중 최저점은 0점입니다.
전체 과목의 평균은 66.66666666666667점입니다.
합격입니다.
라는 문구를 출력해야 한다.불합격입니다.
라는 문구를 출력해야 한다.
- 조건 확인
변수 : 기수, 세 과목의 점수, 세 과목의 평균, 최고점, 최저점
1,2 기는 평균 점수가 60점만 넘으면 된다.
3기에서는 평균 점수가 70점 이상이어야 한다. 하지만 100 점 과목이 두 개 이상인 경우 합격이다.
올바른 기수 입력, 조건문을 이용하여 기수에 따른 평균 계산
최고점 최저점 출력
전체 과목 평균에서의 형변환
- 풀이 과정
1,2 기에서도 100 점 과목이 두 개 이상인 경우 합격으로 봐야 하는 줄 알고 코드가 길어졌었다. 하지만 100점이 2개 이고, 하나가 0점 이기만 해도 평균이 60점 이상이 되기 때문에 고려할 필요가 없었다..
따라서 3기에서만 100점 과목이 2개 이상인 경우만 고려해주었다.
또한 , 그 경우에 최고점과 최저점은 100점으로 출력되어야 하는 부분이 조금 고민을 하였다.
주석처리한 부분이 고민의 과정이였다. 저렇게 할 경우 합격은 표시 되지만 최저점이 100점이 아닌 경우가 되버린다.
따라서 그냥 코드가 좀 길어지더라도 html , css , javascript 중 2개의 점수가 100점인 경우 총 세 경우를 다 나누어서 최고점과 최저점을 각각 100점을 맞은 과목의 점수를 출력하도록 하였다.
이 부분은 조금 더 센스있게 max 와 min 으로 표시 할 수 있을까 고민이 많이 되었던 부분이다. max 와 min 만이 아닌 mid 을 추가하여 최고점을 max, 최저점을 mid 로 출력하는 방법도 있었지만 불필요한 과정이라 생각되어 이렇게 코드를 작성하였다. (이 부분에 대해서는 클린코드의 관점에서는 어떻게 생각하시는지 멘토님의 피드백을 부탁드리겠습니다.)
이 부분은 최저점이 0점으로 출력되게 하는 것이 맞다고 하셔서 수정하였다. 따라서 3기 에서 , 평균이 70점 이상일 때와 , html , css , javascript 세 과목 중 2가지 과목이 100 점일 경우 합격 처리를 하도록 하였다.
또한, 전체 과목의 평균 부분에서는 형변환을 통해 double로 소수점까지 출력하였다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int a=0; // 기수
int html=0;
int css=0;
int javascript=0;
int aver= 0 ; //세과목의 평균
int max=0; // 세 과목 중 최고점
int min=0; // 세 과목 중 최저점
System.out.print("몇 기인지 입력해주세요.");
Scanner scanner = new Scanner(System.in);
a = scanner.nextInt();
System.out.print("HTML 과목 점수를 입력해주세요.");
html = scanner.nextInt();
System.out.print("CSS 과목 점수를 입력해주세요.");
css = scanner.nextInt();
System.out.print("Javascript 과목 점수를 입력해주세요.");
javascript = scanner.nextInt();
aver = ((html + css + javascript)/3);
max = (html > css) ? html : css;
max = (max > javascript) ? max : javascript;
min = (html < css) ? html : css;
min = (min < javascript) ? min : javascript;
if (a == 1 || a ==2) //평균 점수가 60점 이상 합격
if (aver >= 60) {
System.out.println("합격입니다.");
System.out.println("전체 과목 중 최고점은 "+max+"점 입니다.");
System.out.println("전체 과목 중 최저점은 "+min+"점 입니다.");
System.out.println("전체 과목의 평균은 "+(double)(html + css + javascript)/3+"점 입니다.");
} else {
System.out.println("불합격입니다.");
System.out.println("전체 과목 중 최고점은 "+max+"점 입니다.");
System.out.println("전체 과목 중 최저점은 "+min+"점 입니다.");
System.out.println("전체 과목의 평균은 "+(double)(html + css + javascript)/3+"점 입니다.");
}
else if (a == 3) //평균점수가 70 점 이상 합격 or 두 과목 이상 100점 일 경우 합격
{
if (aver >= 70) {
System.out.print("합격입니다.");
System.out.println("전체 과목 중 최고점은 "+max+"점 입니다.");
System.out.println("전체 과목 중 최저점은 "+min+"점 입니다.");
System.out.println("전체 과목의 평균은 "+(double)(html + css + javascript)/3 +"점 입니다.");
} else if ((html == 100 && css == 100) || (html == 100 && javascript == 100) || (css == 100 && javascript == 100) ) {
System.out.println("합격입니다.");
System.out.println("전체 과목 중 최고점은 " + max + "점 입니다.");
System.out.println("전체 과목 중 최저점은 " + min + "점 입니다.");
System.out.println("전체 과목의 평균은 " + (double) (html + css + javascript) / 3 + "점 입니다.");
}
else {
System.out.println("불합격입니다.");
System.out.println("전체 과목 중 최고점은 "+max+"점 입니다.");
System.out.println("전체 과목 중 최저점은 "+min+"점 입니다.");
System.out.println("전체 과목의 평균은 "+(double)(html + css + javascript)/3+"점 입니다.");
}
}
else
{
System.out.println("기수를 올바르게 입력해주세요.");
}
}
}
출력
Java Virtual Machine 의 줄임말이다. OS에 종속받지 않고 CPU가 Java 를 인식, 실행할 수 있게 하는 가상 컴퓨터이다.
Java 소스코드, 즉 원시코드 (x.java) 는 CPU가 인식하지 못하므로 기계어로 컴파일을 해줘야한다. 하지만 Java 는 JVM 이라는 가상머신을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아니라 JVM이 인식할 수 있는 Java bytecode(*.class)로 변환된다.
Java compiler 가 .java
파일을 .class
이라는 Java bytecode 로 변환한다.
변환된 bytecode는 기계어가 아니기 때문에 OS에서 바로 실행되지 않는다. 이 때, JVM이 OS가 bytecode를 이해할 수 있도록 해석해준다. 따라서 bytecode 는 JVM 위에서 OS 상관없이 실행될 수 있는 것이다. OS에 종속적이지 않고, java 파일 하나만 만들면 JVM 위에서 실행할 수 있다.
Garbage Collector 의 줄임말이다. 자바 애플리케이션에서 사용하지 않는 메모리를 자동으로 수거하는 기능을 말한다. C/C++ 같은 언어는 메모리를 할당하고 직접 해제해야했지만, 자바에서는 GC를 이용하여 개발자들이 메모리 관리를 비교적 신경쓰지 않아도 된다.
미션이랑 심화미션까지 잘 수행해주셨네요😄👍 궁금한 점도 잘 정리해주셔서 하나하나 답변 드려보겠습니다!
추후에 제가 작성한 코드 올려드릴텐데, 그 형태 보고 한 번 비교해보면 좋을 것 같네요!! 전 인원 피드백 끝나는대로 바로 올려드리겠습니다:)
기록으로 남길 때는 기존에 아는 내용보다는, 몰랐던 내용이나 어렵다고 느낀 내용을 기록으로 남기시는 게 훨씬 도움이 많이 될거에요😄 그래도 아는 내용도 한 번 더 정리한다면 복습의 효과로도 좋을 것 같네요ㅎㅎㅎ
심화 미션은 자바와 스프링을 활용한 프로젝트 경험을 하신 뒤에, 심화 미션을 수행하셔도 늦지 않습니다:) 지금은 심화미션은 넘기셔도 좋습니다~~~