이번엔 나중에 더 자세히 배울 내용인 배열, 메소드, 클래스를 가지고 구구단을 구현하며 에습해보겠습니다. 위의 개념들은 제가 아직 정확하게 이해하지 못하였고 이런식으로 활용하는구나 정도만을 이해한 것임을 참고해주시기 바랍니다.
지금까지는 하나의 변수에 하나의 값만을 대입하였지만, 배열을 통해 여러개의 값을 한번에 대입 할 수 있습니다.
public static void main(String[] args) {
int[] result = new int[9];
for(int i=0; i<result.length; i++) {
result[i] = 2 * (i+1);
}
for(int i=0; i<result.length; i++) {
System.out.println(result[i]);
}
result = new int[9]; // 기존에 있는 배열을 재사용하기위해 int를 뺌
// 혹은 time3같은 새로운 배열을 만들어서 활용해도됨
for(int i=0; i<result.length; i++) {
result[i] = 3 * (i+1); //위에 반복문이랑 똑같고 안에 2,3,4수만바뀜
//어떻게 반복 줄일까? 중첩 포
}
for(int i=0; i<result.length; i++) {
System.out.println(result[i]);
}
배열은 int[] result = new int[9]와 같이 자료형뒤에 "[]"대괄호를 붙여주고 배열안에 몇개의 데이터가 들어가는지 표시해주면서 선언 할 수 있습니다. 배열명.length를 하면 배열안에 몇개의 자료가 들어 있는지 알 수 있습니다. 배열안에 자료는 위의 예제에서와 같이 result[0] 을 통해 표현할 수 있으며 0부터 시작하여 순서대로 표현이 됩니다.
위의 사실을 바탕으로 result라는 배열을 선언하고 result에 2단의 곱셉을 하나씩 대입해놓고 아래의 반복문을 통해 result의 대입되있는 값들을 출력하는 2개의 반복문을 만들었습니다.
위의 2개의 반복문을 복사하여 result[i]=2*(i+1)의 값만 3,4,5... 으로 변환해주면 하나의 구구단이 완성됩니다.
public static void main(String[] args) {
int[] result = new int[9];
for(int j=2; j < 10; j++) {
for(int i=0; i<result.length; i++) {
result[i] = j * (i+1);
}
for(int i=0; i<result.length; i++) {
System.out.println(result[i]);
}
System.out.println("");
}
위의 result[i]=2*(i+1)의 값을 바꾸기 위해 반복되던 문장들을 반복문을 써서 한눈에 보이는 문장으로 만들었습니다.
메소드는 프로그래머가 필요한 수식을 함수화 해서 언제든지 불러내서 사용할 수 있는 것 정도로 이해했습니다.
public static int[] calculate(int times) {
int[] result = new int[9];
for(int i=0; i<result.length; i++) {
result[i] = times * (i+1);
}
return result;
}
public static void main(String[] args) {
int[] result = calculate(2);
for(int i=0; i<result.length;i++) {
System.out.println(result[i]);
}
int[] times3 = calculate(3);
for(int i=0; i<result.length;i++) {
System.out.println(times3[i]);
}
int[] times4 = calculate(3);
for(int i=0; i<result.length;i++) {
System.out.println(times4[i]);
}
public static int[] calculate[int times] 라는 문장을 통해 calculate라는 메소드를 만들고 중괄호 안에 그 메소드를 호출해서 할 일들을 작성하고 최종 결과물을 return ; 안에 적어주면 main 메소드 안에서 언제든지 호출해서 사용할 수 있는 calculate라는 메소드를 만들 수 있습니다.
public static int[] calculate[int times]에서 int[]은 메소드에 최종산물인 return;의 자료형을 뜻하고 calculate는 메소드명, 괄호안에는 입력값의 자료형과 변수명이 들어가게 됩니다.
calculate 메소드를 사용해 각 단별 곱셈을 하고 아래의 for을 통해 calculate의 결과물이 대입되어있는 배열을 차례로 출력 하는 방식으로 구구단을 구현하였습니다.
public static int[] calculate(int times) {
int[] result = new int[9];
for(int i=0; i<result.length; i++) {
result[i] = times * (i+1);
}
return result;
}
public static void print(int[] result) {
for(int i=0; i<result.length;i++) {
System.out.println(result[i]);
}
}
public static void main(String[] args) {
int[] result = calculate(2);
print(result);
int[] times3 = calculate(3);
print(times3);
int[] times4 = calculate(4);
print(times4);
위의 예제에서 출력을 위해 사용된 for문이 반복되는 것을 발견하고 print 메소드로 만들어 calculate와 print 두 메소드로 간단하게 구구단을 구현할 수 있습니다.
복잡한 코드일 수록 한 클래스안의 너무 많은 내용들이 들어가 복잡성이 증가하는걸 방지하기 위해 다른 클래스의 필요한 메소드를 만들어 두고 현재의 클래스에 불러와서 사용할 수 있습니다.
public class Gugudan {
public static int[] calculate(int times) {
int[] result = new int[9];
for(int i = 0 ; i < result.length; i++) {
result[i] = times * (i+1);
}
return result;
}
public static void print(int[] result) {
for(int i = 0 ; i < result.length; i++)
System.out.println(result[i]);
}
}
먼저 마지막 예제인 Gugudan 클래스에 main메소드 아래내용들을 지우고 calculate와 print 메소드만 남겨둡니다.
public class GugudanMain {
public static void main(String[] args) {
for (int i = 2; i < 10; i++) {
int[] result = Gugudan.calculate(i);
Gugudan.print(result);
}
}
}
GugudanMain이란 새로운 클래스를 만들고 구구단을 구현하기 위해 Gugudan 클래스의 calculate 메소드를 Gugudan.calculate(클래스명.메소드명)으로 불러왔습니다. 마찬가지로 print메소드를 불러오고 for문을 통해 2가지 메소드가 2~9까지 반복될 수 있도록 하여 구구단을 구현하였습니다.
마지막으로 2가지 예제를 통해 위에서 배운것들을 정리해 보겠습니다.
Q1.사용자가 입력한 값에 따라 크기가 다른 구구단을 계산해 출력한다.
예를 들어 사용자가 8을 입력하면 팔팔단, 19를 입력하면 십구십구단(2 1에서 19 19)을 계산해 출력한다.
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int input = scanner.nextInt();
int[] result = new int[input];
for (int i = 2; i <= result.length; i++) {
for(int j = 0; j < result.length; j++) {
result[j] = i * (j+1);
System.out.println(result[j]);
}
}
int[] result = new int[input]; 문장을 통해 scanner로 입력받은 input만큼 result라는 배열의 값을 지정해주고 그 배열의 length 만큼 반복되는 반복문을 만들어 구구단을 구현 했습니다.
Q2 사용자가 입력한 값에 따라 크기가 다른 구구단을 계산해 출력한다.
예를 들어 사용자가 "8,7"과 같은 문자열을 입력하면 팔칠단을 구현한다. 팔칠단은 2 1 ... 2 7, 3 1 ... 3 7, ... , 8 1 ... 8 7 까지 구현하는 것을 의미한다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String[] split = input.split(",");
int input1 = Integer.parseInt(split[0]);
int input2 = Integer.parseInt(split[1]);
for(int i = 2; i <= input1; i++) {
for(int j = 1; j <= input2; j++) {
int result = i * j;
System.out.println(result);
}
}
기존에 정수를 입력받던 nextInt와는 다르게 문자열을 입력받기 위해 nextLine()를 입력하여 문자열을 입력을 받고 입력받은 문자열을 split을 통해 콤마를 기준으로 나누어 문자열 배열인 split에 집었습니다. 그 후 split[0], split[1]에 들어있는 각각의 값을 Integer.paseInt를 통해 정수로 만들어 정수 변수인 input1, inpu2 얻었습니다. 이 두 변수를 활용하여 반복문을 만들어 구구단을 구현하였습니다. split같은 생소한 기능을 사용하였지만 다양한 값을 입력받아 활용하기 위한 여러 장치들이 있다는 것을 배울 수 있었습니다.