👉 기본 환경

- Language: Java

- IDE: Eclipse

 

 

⌨️ 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        int N = Integer.parseInt(br.readLine());
 
        Map<String, Integer> map = new HashMap<>();
 
        for (int i = 0; i < N; i++) {
            String s = br.readLine();
            map.put(s, s.length());
        }
 
        String[] mapKeys = (String[]) map.keySet().toArray();
        Arrays.sort(mapKeys);
 
        List<Object> keys = new ArrayList<>();
        for (Object key : mapKeys) {
            keys.add(key);
        }
        Collections.sort(keys, ((k1, k2) -> (map.get(k1).compareTo(map.get(k2)))));
 
        for (Object key : keys) {
            bw.write(key + "\n");
        }
 
        bw.flush();
        bw.close();
    }
 
}
 
 
 

 

 

🖨️오류

 java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.String; ([Ljava.lang.Object; and [Ljava.lang.String; are in module java.base of loader 'bootstrap')

 

 

📡 원인

Object[]를 String[]로 바로 형변환 할 수 없음

 

 

📰 해결 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        int N = Integer.parseInt(br.readLine());
 
        Map<String, Integer> map = new HashMap<>();
 
        for (int i = 0; i < N; i++) {
            String s = br.readLine();
            map.put(s, s.length());
        }
 
        String[] mapKeys = map.keySet().toArray(new String[0]);
        Arrays.sort(mapKeys);
 
        List<Object> keys = new ArrayList<>();
        for (Object key : mapKeys) {
            keys.add(key);
        }
        Collections.sort(keys, ((k1, k2) -> (map.get(k1).compareTo(map.get(k2)))));
 
        for (Object key : keys) {
            bw.write(key + "\n");
        }
 
        bw.flush();
        bw.close();
    }
 
}
 
 
 

String[] mapKeys = map.keySet().toArray(new String[0]);

    - Object[]를 String[]을 형변환하는 것이 아닌 개별 요소를 String으로 직접 지정하고 String[]에 저장

    - 요소 타입을 명시적으로 지정하면 map.keySet()에서 반환되는 요소들을 mapeys 배열에 복사

 

+ 배열의 크기를 0으로 지정한 이유

    - 실제 반환될 배열의 크기를 동적으로 조절하고자 0으로 지정

    - 컬렉션의 크기에 맞게 배열이 자동으로 생성되고 요소들이 복사되기 때문에 정확한 크기를 예측하거나 관리할 필요가 없음

 

+ String[] mapKeys = map.keySet().toArray(String s); 가 안되는 이유

    - toArray()의 매개변수는 T[] a이므로 배열을 전달하여 요소 타입을 추론하게 해야 함

 

 

 

📚 참고 자료

 

[Java] ArrayList의 toArray()

ArrayList는 자바로 개발을 하면서 가장 많이 쓰는 리스트의 구현 클래스 중 하나입니다. ArrayList 타입의 String 리스트를 배열로 변환하려 할때는 아래와 같이 사용합니다. ArrayList strs=new ArrayList(); st

jerry92k.tistory.com

 

👉 기본 환경

- Language: Java

- IDE: Eclipse

 

 

⌨️ 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
       bw.write(method1({"hello""java""world"}));
 
        bw.flush();
        bw.close();
 
    }
 
    public static String method1(String[] sentence) {
       StringBuffer sb = new StringBuffer();
        for (String s : sentence) {
            sb.append(s);
        }
        return sb.toString();
    }
 
 
 

 

 

🖨️오류

Syntax error, insert 'SimpleName' to complete ArgumentList:

 

 

📡 원인

medthod1의 매개변수로 String[]이 전달되어야 함

{}로 객체 생성을 할 수 없음

 

 

📰 해결 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        bw.write(method1(new String[]{"hello""java""world"}));
 
        bw.flush();
        bw.close();
 
    }
 
    public static String method1(String[] sentence) {
        StringBuffer sf = new StringBuffer();
        for (String s : sentence) {
            sb.append(s);
        }
        return sb.toString();
    }
 
 
 

new String[]으로 객체 생성 후, 매개변수로 String[] 전달

 

👉 기본 환경

- Language: Java

- IDE: Eclipse

 

 

⌨️ 코드

1
2
3
4
5
        int[] intArr = new int[3];
        while (intArr.length-- > 0) {
 
        }
 
 
 

 

 

🖨️오류

java.lang.Error: Unresolved compilation problem: The final field array.length cannot be assigned

 

 

📡 원인

array의 length 값은 final 값으로 변경할 수 없음

 

 

📰 해결 방법

1
2
3
4
5
6
        int[] intArr = new int[3];
        int len = intArr.length;
        while (len-- > 0) {
 
        }
 
 

새로운 변수를 선언해서 length값을 넣고, 해당 변수의 값을 변경

 

 기본 환경: IDE: Eclipse, Language: Java

 

 

발생 Error

Java에서 다음 Source Code를 실행할 경우,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
 
        int[][] intArr = new int[9][9];
        int[][] intMax = new int[9][9];
        
        for(int i=0; i<9; i++) {
            for(int j=0; j<9; j++) {
                intArr[i][j] = Integer.parseInt(br.readLine());
                if(intArr[i][j] > intMax) {
                    intMax = intArr[i][j];
                }
            }
        }
        
        bw.write(intMax + "\n");
        bw.flush();
    }
}
 
 
 

🚨 다음과 같은 오류 발생

java.lang.Error: Unresolved compilation problems: The operator > is undefined for the argument type(s) int, int[][]

Type mismatch: cannot convert from int to int[][]

 

 

발생 원인

intArr[i][j] = int, intMax = int[][] 이므로 타입이 달라 비교할 수 없음

 

 

해결 방법

타입을 하나로 변형하여 비교(여기서는 int와 int를 비교)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
 
public class Main {
    public static void main(String[] args) throws Exception {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
 
        int[][] intArr = new int[9][9];
        int intMax = new int[0][0];
        
        for(int i=0; i<9; i++) {
            for(int j=0; j<9; j++) {
                intArr[i][j] = Integer.parseInt(br.readLine());
                if(intArr[i][j] > intMax) {
                    intMax = intArr[i][j];
                }
            }
        }
        
        bw.write(intMax + "\n");
        bw.flush();
    }
}
 
 
 

 

 기본 환경: IDE: Eclipse, Language: Java

 

 

발생 Exception

Java에서 다음 Source Code를 실행할 경우,

⭐ Unresolved compilation problem: The method calc(int, double) is ambiguous for the type Test2

java.lang.Error: Unresolved compilation problem 발생

 

 

Error 원인

Test2 클래스에서 calc()가 매개변수 타입만 다르게 overloading되어있음

2개의 매개변수에 각각 10을 대입할 경우, 어떤 calc를 실행하고자하는지 알 수 없어 발생

 

 

해결 방법

calc() 사용 시, 어떤 메서드를 사용하는지 인자를 정확히 기재

(calc()에 각각 10, 10.0을 입력하여 calc(int, double)를 사용할 것임을 명시함)