- 다음은 유저가 입력한 두 단어가 아나그램(anagram:철자 순서만 바뀐 단어)인지를 판별하는 예제이다.
import java.util.Arrays;
import java.util.Scanner;
public class Anagram {
// main method에서 입력받은 string타입의 두 단어를 parameter로 받아서 아나그램인지 판별하는 method.
// 아나그램일경우 true, 아나그램이 아닐경우 false값을 리턴함.
public static boolean isAnagram(String str1, String str2) {
boolean result = true; // result의 기본값은 true이며 아래의 판별과정에서 아나그램이 아닐경우
// false.
char[] arr1 = str1.toCharArray(); // str1 parameter의 string값을 char타입의
// arr1배열에 넣은 후
Arrays.sort(arr1); // 알파벳 순서대로 정렬.
System.out.println(Arrays.toString(arr1)); // arr1배열에 정렬된 결과 출력.
char[] arr2 = str2.toCharArray();
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
// 먼저 입력받은 두 단어의 길이가 다를 경우 아나그램이 아니므로 false값 리턴후 종료.
if (arr1.length == arr2.length) {
for (int i = 0; i < arr1.length; i++) { // 두 단어의 길이가 같은 경우 arr1과
// arr2의 내용이(알파벳이)같은지 확인.
if (arr1[i] != arr2[i]) { // 확인 과정 중 같지않은 경우가 나오면 result값을
// false로 바꾸고 종료.
result = false;
break;
}
}
} else {
result = false;
}
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("첫 번째 문자열을 입력해주세요.");
String str1 = scanner.nextLine();
System.out.println("두 번째 문자열을 입력해주세요.");
String str2 = scanner.nextLine();
if (isAnagram(str1, str2) == true) { // isAnagram method로 두 단어를
// parameter로 넘겨준 후 결과가 true일 경우.
System.out.println("두 문자열은 Anagram이 확실합니다.");
} else { // isAnagram method로 두 단어를 parameter로 넘겨준 후 결과가 false일 경우.
System.out.println("두 문자열은 Anagram이 아닙니다.");
}
}
}
- 다음은 [Java] 02. 제어문에서 다뤘던 'FindNearestPoint'예제에 배열을 적용하여 다시 짜본 예제이다.
import java.util.Arrays;
public class DistanceCalculator {
public static double calcDistance(int[] p1, int[] p2) { // 정의된 다섯개의 좌표와 유저가
// 입력한 좌표에 대한 값을
// parameter로 받아서
// 각각의 거리를 계산.
return Math.sqrt(Math.pow(p1[0] - p2[0], 2) + Math.pow(p1[1] - p2[1], 2));
}
public static void main(String[] args) {
int[][] dataArr = { { 2, 4 }, { 4, 6 }, { 10, 4 }, { 3, 2 }, { 9, 2 } };// 미리
// 정의된
// 다섯개의
// 좌표.
int[] targetPoint = { 3, 4 }; // 임의의 유저입력 좌표.
int[] minPoint = null;
double minDistance = Double.MAX_VALUE;
for (int[] temp : dataArr) {
double distance = calcDistance(temp, targetPoint); // 미리 정의된 다섯개의
// 좌표와 유저입력 좌표와의
// 거리 계산.
if (distance < minDistance) {
minDistance = distance;
minPoint = temp;
}
System.out.println(distance);
}
System.out.println("-----------");
System.out.println(minDistance);
System.out.println(Arrays.toString(minPoint));
}
}
- 배열을 공부하면서 가장 크게 느낀 점은 배열 자체의 내용보다 오히려 '타입'에 대한 것이 크다. 배열이라는 것이 같은 '타입'에 대한 것들을 한꺼번에 다루는 것이기에 '타입'에 대한 고민을 할 수밖에 없었는데 이는 자바를 공부하면서 가장 애매했던 것 중의 하나였다. 특히 사용자(개발자)가 정의하는 '타입'이 주는 어려움과 편리함에 이해하고 나서 자바라는 언어를 조금이나마 더 이해할 수 있게 됐달까. 지금 이 포스팅에서 자바의 '타입'에 대해 더 깊이 다룰 순 없지만, 누군가 배열에 대한 궁금함을 안고 이 글을 보게 된다면 배열뿐만이 아니라 아마도 나와 같은 고민을 하게 될 것이라..!