실습 총 8문제
1. 배열의 값에 *2배의 연산된 값이 산출되도록 메소드를 작성하시오.
public static void main(String[] args) {
int num1[] = {1, 2, 3, 4, 5};
getDouble(num1);
System.out.println(Arrays.toString(num1));
}
static void getDouble(int num1[]){
for(int i = 0; i < num1.length; i++){
num1[i] = num1[i] * 2;
}
}
: 배열은 참조형이라서 하나씩 순회하면서 바꿔야한다.
처리 과정 요약 :
1. int num1[] = {1, 2, 3, 4, 5};
: 배열을 선언하고 초기화
2. getDouble(num1);
: 배열 num1의 참조값(주소)을 getDouble 메서드에 전달
3. static void getDouble(int num1[]) { ... }
: 전달받은 배열을 수정하여 각 요소의 값을 두 배로 만듬
4. System.out.println(Arrays.toString(num1));
: 수정된 배열을 출력
2. 변수를 선언하고 두 수를 나눗셈 연산으로 몫과 나머지를 구하는 메소드를 작성하시오.
public static void main(String[] args) {
int num = 25;
int num2 = 3;
int tag[] = new int[1];
int result = getResult(num, num2, tag);
System.out.println("몫:" + result + " 나머지:" + tag[0]);
}
static int getResult(int num, int num2, int tag[]){
int numberOt;
numberOt = num / num2;
tag[0] = num % num2;
return numberOt;
}
: 여기서 보면 tag는 참조형이라 리턴값 없이도 배열 자체가 처리되어 main에 적용된다.
: 반면 num, num2는 기본형이라 연산값을 리턴해줘야 한다.
3. 두 점 (x, y)와 (x1, y1)간의 거리를 구한다.
public static void main(String[] args) {
double d = getDistance(1, 1, 2, 1);
System.out.println("두점의 거리는 " + d + "입니다");
}
static double getDistance(int x1, int y1,int x2, int y2){
int y = (int)Math.pow(y2 - y1, 2);
int x = (int)Math.pow(x2 - x1, 2);
double distance = Math.sqrt(y + x);
return distance;
}
두 점 간의 거리 구하는 공식 : 루트(y2-y1)^2 + (x2-x1)^2
루트 함수 : Math.sqrt
n승 구하는 함수 : Math.pow
: 입력값이 (1, 1, 2, 1)이므로 함수에서도 파라미터 4개 선언
: Math.pow(y2 - y1, 2); 여기서 숫자 2는 2승을 의미한다.
**return값 뒤에 변수명은 가독성과 명확성을 높이기 위함**
**내부에서 처리한 값 어떤 것을 리턴시킬지 명확하게 하기 위함**
** return Math.sqrt(Math.pow(y2 - y1, 2) + Math.pow(x2 - x1, 2)); 이렇게 리턴해도 상관없긴함**
4. 대문자로 변경하는 함수를 작성하라.
public static void main(String[] args) {
char ch[] = {'a', 'b', 'c'};
UpperChar(ch);
System.out.println(Arrays.toString(ch));
}
static void UpperChar(char c[]){
for(int i = 0; i < c.length; i++) {
if(c[i] >= 'a' && c[i] <= 'z') {
c[i] = (char)(c[i] - 32);
}
}
}
: 아스키코드 활용한 문제
5. shuffle(섞는)메소드를 작성하시오.
public static void main(String[] args) {
int original[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
System.out.println(Arrays.toString(original));
// 이건 그냥 원본 숫자가 뭐였는지 보여주는 용도
int result1[] = shuffle(original);
System.out.println(Arrays.toString(result1));
// 여기가 셔플된 숫자 확인
}
static int[] shuffle(int original[]){
for(int i = 0; i < 10000; i++) {
int x = (int)(Math.random() * 9);
int y = (int)(Math.random() * 9);
int temp = original[x];
original[x] = original[y];
original[y] = temp;
}
return original;
}
: 배열의 두 요소를 무작위로 선택하여 위치를 바꾸려면, 두 개의 서로 다른 인덱스(x, y)가 필요
: 배열 [1, 2, 3, 4, 5]에서 2번 인덱스(x = 2)와 4번 인덱스(y = 4)를 선택했다면, 값 3과 5를 교환
: 즉, swap이 필요하다.
: x에는 랜덤의 숫자 9개, y도 마찬가지
: swap에서 original에는 main에서 보내준 1 ~ 9까지 나열된 숫자가 있다.
: x랑 y는 1 ~ 9까지 섞인 배열이니까 swap에서 몇번째 자리 교환하면 original 배열이 점점 섞인다.
6. max(최대값)메소드를 작성하시오.
public static void main(String[] args) {
int data[] = {3, 2, 9, 4, 7};
System.out.println(Arrays.toString(data));
System.out.println("최대값:"+ max(data));
}
static int max(int data[]){
int max = data[0]; // 잴 처음 값이 기준. max = 0하면 - 값이 있을 시 망함.
for(int i = 0; i < data.length; i++){
if(data[i] > max){
max = data[i];
}
}
return max;
}
: static int[] max(int data[])
: static int max(int data[])
: 두개의 차이는 리턴되는 타입이 int[]랑 int 차이
: 즉, 배열 내에서 최대값을 찾아서 최대값만 리턴할 때 int
: 배열에서 최대값을 포힌한 새로운 배열을 리턴할 때 int[]
**중요하니 헷갈리지말고 기억하라**
7. 문자열에 숫자만 포함하고 있는지 문자가 포함되어 있는지 확인하는 isNumber메소드를 작성하시오.
방법 1.
public static void main(String[] args) {
String str = "123";
System.out.println(str+"는 숫자입니까? "+ isNumber(str));
str = "1234o";
System.out.println(str+"는 숫자입니까? "+ isNumber(str));
str = "1a234";
System.out.println(str+"는 숫자입니까? "+ isNumber(str));
}
static boolean isNumber(String str) {
for(int i = 0; i < str.length(); i++){
if(!Character.isDigit(str.charAt(i))){
return false;
}
}
return true;
}
charAt(i) : 문자열에서 i번째 인덱스에 있는 문자를 char 타입으로 반환
character.isDigit(char) : char 타입의 문자가 숫자인지 아닌지를 판단하는 메소드
: 숫자라면 true, 아닐 시 false
: 즉 위 코드도 str에 있는 문자열을 하나씩 비교하면서 char 타입일 시 false 반환, int일 시 true 반환
방법 2.
public static void main(String[] args) {
String str = "123";
System.out.println(str+"는 숫자입니까? "+ isNumber(str));
str = "1234o";
System.out.println(str+"는 숫자입니까? "+ isNumber(str));
str = "1a234";
System.out.println(str+"는 숫자입니까? "+ isNumber(str));
}
static boolean isNumber(String str) {
boolean b = true;
for(int i = 0; i < str.length(); i++){
char c = str.charAt(i);
int asc = (int)c;
if(asc < 48 || asc > 57){ // 아스키 코드에 의해서 숫자가 아님을 판단
b = false;
break;
}
}
return b;
}
: 문자열을 하나씩 순회하면서 아스키코드로 변환
: 변환된 값으로 if조건문 걸어줌
: 아스키 코드를 보면 48 ~ 57까지가 숫자
: 그래서 48보다 작거나 57보다 크면 숫자가 아니기 때문에 false반환
8. 2차원 배열을 1차원 배열로 변환하는 함수를 작성하라.
방법 1.
public static void main(String[] args) {
int arrayTwo[][] = {
{ 1, 2, 3, 4 }, // arrayTwo.length
{ 5, 6, 7, 8 }, // arrayTwo[n].length
{ 9, 10, 11, 12 }
};
int arrayOne[] = arrayTwoOfArrayOne( arrayTwo );
System.out.println( Arrays.toString(arrayOne) );
}
static int[] arrayTwoOfArrayOne(int arrayTwo[][]){
// 1차원 배열의 크기를 2차원 배열의 모든 요소의 수와 같아야 함으로
int total = 0;
// 2차원 배열의 모든 행의 길이를 합산하여 1차원 배열의 크기를 결정
for(int i = 0; i < arrayTwo.length; i++){
total += arrayTwo[i].length;
}
// 1차원 배열 생성
int arrayOne[] = new int[total];
int index = 0;
for(int i = 0; i < arrayTwo.length; i++){
for(int j = 0; j < arrayTwo[i].length; j++){
arrayOne[index++] = arrayTwo[i][j];
}
}
return arrayOne;
}
: arrayTwo.length는 행의 개수
: arrayTwo[i].length는 행의 길이
: 총 4 + 4 + 4 크기의 1차원 배열을 만든다.(total)
: 외부 반복문은 2차원 배열의 각 행을 순회한다.
: 내부 반목문은 해당 행의 각 요소를 순회한다.
: index++은 1차원 배열에서 요소를 채워넣을 위치를 나타낸다.
: 0번째부터 시작해서 지정된 크기까지 채워넣는다.
방법 2.
public static void main(String[] args) {
int arrayTwo[][] = {
{ 1, 2, 3, 4 }, // arrayTwo.length
{ 5, 6, 7, 8 }, // arrayTwo[n].length
{ 9, 10, 11, 12 }
};
int arrayOne[] = arrayTwoOfArrayOne( arrayTwo );
System.out.println( Arrays.toString(arrayOne) );
}
static int[] arrayTwoOfArrayOne(int arrayTwo[][]){
int arrayOne[] = new int[arrayTwo.length * arrayTwo[0].length];
int count = 0;
for(int i = 0; i < arrayTwo.length; i++){
for(int j = 0; j < arrayTwo[i].length; j++){
arrayOne[count] = arrayTwo[i][j];
count++;
}
}
return arrayOne;
}
arrayTwo.length : 2차원 배열의 행(row)개수. 값은 : 3
arrayTwo[0].length : 첫 번째 행의 열(column)개수. 값은 : 4
: 그 밑에는 첫번째 방법 코드와 동일
'Java' 카테고리의 다른 글
Java) 4가지 예외 클래스(Exception) 정리 (0) | 2025.01.02 |
---|---|
Java) Exception 기초 & 실습 (0) | 2025.01.02 |
Java) 함수 이해와 활용 : 매개변수 전달 방식과 리턴 값 처리 (0) | 2025.01.01 |
Java) Sorting : 선택 정렬 알고리즘 (0) | 2024.12.31 |
Java) 랜덤 숫자 뽑기 프로그램(Random Value Finding) (0) | 2024.12.31 |