System.out을 통하여 출력
System.in을 통해서 사용자의 입력을 받을 수 있다.
자료구조 책에서도 scanner를 배웠는데 강의에서도 scanner를 다루고 있다.
문제를 직접 풀어보는 단계여서 확실히 코드를 직접 짜는데 도움이 많이 된다.
파이썬보다 클래스를 지정할 게 많아서 귀찮긴 하다만 나름 재미가 있는듯?
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 숫자를 입력하세요");
int num1 = scanner.nextInt();
System.out.print("두 번째 숫자를 입력하세요");
int num2 = scanner.nextInt();
if (num1 > num2) {
int temp = num1;
num1 = num2;
num2 = temp;
}
System.out.println("두 숫자 사이의 모든 정수 : ");
for (int i = num1; i<=num2; i++){
System.out.print(i);
if (i != num2) {
System.out.print(",");
}
}
}
int age = scanner.nextInt(); // 10\n 엔터는
scanner.nextLine(); // \n빈 문자만 남는다. 한번 더 사용해서 라인을 읽고 버리면 된다.
1. if문을 사용한 코드
while(true) {
input = scanner.nextInt();
if(input == -1) {
break;
}
sum += input;
cnt++;
}
2. while문에 조건을 넣은 코드
while ((input = scanner.nextInt()) != -1){
sum += input;
cnt++;
}
반복문 실행
while ((input = scanner.nextInt()) != -1) //사용자 3입력
while ((input = 3) != -1) // input에 3 대입
while ((input(3)) != -1) // input의 값 읽기
while ((3) != -1) // ()제거
while (3 != -1) // 부등식 연산
while (true) // while문 실행
반복문 종료
while ((input = scanner.nextInt()) != -1)
while ((input = -1) != -1) // input에 -1 대입
while ((-1) != -1) // ()제거
while (-1 != -1) // 부등식 연산
while (false) //while문 종료
Scanner scanner = new Scanner(System.in);
int totalCost = 0;
while(true) {
System.out.println("1: 상품 입력, 2: 결제, 3: 프로그램 종료");
int option = scanner.nextInt();
if(option == 1){
scanner.nextLine();
System.out.print("상품명을 입력하세요 : ");
String product = scanner.nextLine();
System.out.print("상품의 가격을 입력하세요: ");
int price = scanner.nextInt();
System.out.print("구매 수량을 입력하세요: ");
int quantity = scanner.nextInt();
totalCost += price * quantity;
System.out.println("상품명: " + product + "가격 : " + price + "수량 :" + quantity + " 합계 : " + price * quantity);
} else if (option == 2){
System.out.println("총 비용: " + totalCost);
totalCost = 0;
} else if (option == 3){
System.out.println("프로그램을 종료합니다.");
}else{
System.out.println("올바른 옵션을 선택해주세요.");
}
}
동일한 자료형을 묶어 저장하는 참조 자료형이다.
생성할 때 크기를 지정해야 하고, 크기를 지정하면 절대 변경할 수 없다.
같은 타입의 변수를 사용하기 편하게 하나로 묶어둔 것이다.
int[] a=new int[3];
int[] students; //배열 변수 선언;
students = new int[5]; 5개의 배열을 만드는 것이다.
[0, 1, 2, 3, 4] 생성된다.
boolean[] array5=new boolean[3];
int[] a=new int[]{3, 4, 5}; //이렇게 대입 가능하다.
배열의 크기만큼 메모리를 확보한다. 배열에는 변수의 참조 값만 들어있다.
배열을 생성하면 자바는 메모리 어딘가에 있는 배열에 접근할 수 있는 참조값(주소)(x001)을 반환하는 것이다. 변수는 참조값을 가지고 있다. 메모리에 있는 실제 배열에 접근하고 사용할 수 있다. 변수를 통해서 배열에 접근하는 것이다.
- 인덱스
students[0] = 90;
students[1] = 80;
System.out.println("학생1 점수 : " + students[0]);
배열은 0부터 시작한다. x001의 [0]으로 이동을 한다.
//배열 변수 선언
int[] students = new int[]{90, 80, 70, 60, 50}; // 배열 생성과 초기화 이런 식으로도 가능하다.
students[0] = 90;
students[1] = 80;
students[2] = 70;
students[3] = 60;
students[4] = 50;
// 변수 값 사용 students.length 배열의 길이를 반환한다.
for(int i = 0; i<students.length; i++) {
System.out.println("학생" + (i + 1) + "점수 : " + students[i]);
}
2) int[] students = {90, 80, 70, 60, 50}; 이런식으로 최적화가 가능하다.
배열의 생성과 초기화가 가능하다.
1) 불리언(boolean) : false
2) 정수(byte, short/char, int, long) : 0
3) 실수(float, double) : 0.0
4) 클래스, 배열 : null
기본형(Primitive Type)
우리가 지금까지 봤었던 int, long, double, boolean처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입이다.
참조형(Reference Type)
int[] students와 같이 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입을 참조형이라 한다. 객체나 클래스를 담을 수 있는 변수들도 모두 참조형이다.
배열이 참조형을 사용하는 이유?
동적으로 사이즈를 변경할 수 있다. Scanner를 사용하여 사용자 입력에 따라 size변수의 값이 변하고, 생성되는 배열의 크기도 달라질 수 있다. 동적 메모리 할당이라 한다. 기본형은 선언과 동시에 사이즈가 정해지지만, 참조형을 사용하면 동적으로 크기가 변하기 때문에 유연성이 생긴다. 기본형은 빠르고 메모리를 효율적으로 처리한다.
리펙토링
가독성을 높이고, 유지보수를 용이하게 하는 과정이다.
프로그램의 성능을 향상시킨다.
arr[0][0] : 1
arr[0][1] : 2
arr[0][2] : 3
arr[1][0] : 4
arr[1][1] : 5
arr[1][2] : 6
코드를 통해서 2차원 배열의 사용법을 알아보자.
int[][] arr = {
{1,2,3},
{4,5,6},
{7,8,9}
}; // 행3, 열3
for(int row=0; row<arr.length; row++){
for(int column =0; column< arr[row].length; column++){
System.out.print(arr[row][column] + " "); // 0열을 출력하는 것이다.
}
System.out.println();
}
}
int[][] arr = new int[3][3];
int i = 1;
for(int row = 0; row<arr.length; row++){
for(int column = 0; column<arr[row].length; column++){
arr[row][column] = i++;
}
}
for-each문이라고도 한다.
배열을 사용할 때 기존for문 보다 더 편리하게 사용할 수 있다.
for (변수 : 배열 또는 컬렉션) {
// 배열 또는 컬렉션의 요소를 순회하면서 수행할 작업
}