2014-11-06 2 views
-2

저는 minecraft 플러그인을 코딩하고 있습니다. 나는 작은 문제가있다. 그래서 우리는 이것을 가지고 있습니다 :연산자 +가 arguement 유형에 대해 정의되지 않았습니다. ChatColor, int

int ok = Integer.parseInt(test) - 1; 
lores.set(1, ChatColor.RED + ok); 

이제 두 번째 줄에 오류가 있습니다. + 연산자는 ChatColorint에 대해 정의되지 않습니다. int ok이하는 것은, 아이템의 미니 크래프트 전설에서 하나의 숫자를 빼냅니다. 그들의 상품이 지식이있는 막대기라고 말하십시오 5 uses remaining!. 이제는 마우스 오른쪽 버튼으로 클릭하십시오. 그것은 4 사용이 남아 말할 것이다. 모든,

+0

lores.set, int 및 int의 입력 매개 변수는 무엇입니까? –

+1

ChatColor 유형의 개체에 1을 추가 할 수 없습니다. – Jens

+0

은'ChatColor.RED.toString() + String.valueOf (ok)'를 사용합니다. 그렇다면 그것이 작동합니다. + - 연산자는 추가에 대해서만 사용됩니다. java가 코드를 탐색하고 두 개의 문자열을 찾으면 문자열을 concat합니다. 추가 된 첫 번째 피연산자가 문자열이면 java가 두 번째 피연산자로 변환하여 문자열로 변환합니다. ChatColor를 문자열로 변환하면 문제가 해결되지만 코드를 읽을 수 있도록하려면 'ok'를 문자열로 변환해야합니다. – Sirac

답변

4

귀하의 + 연산자는 두 개의 피연산자를 가져옵니다 .. 여기이 작은 문제를 제외하고 잘 작동하는 것 같다 ChatColor 객체 (Object)와 ok (int). The Java Language Specification §15.18

에 따른 + 연산자의 피연산자의 형태는 조작이 문자열 연결이고, String 경우.

그렇지 않으면 + 연산자의 피연산자의 각각의 유형은 프리미티브 숫자 타입, 또는 오류가 발생 컴파일 시간 (§5.1.8) 컨버터블 유형이어야한다.

따라서 Object의 동작 가능한 + 오퍼레이터 사이에서만 조작 될 것이다

  • String + (null 포함 아무것도)
  • 두 피연산자가 Number 또는의 부속들이 프리미티브 숫자 값. ChatColor.RED + ok

    당신은이 작업을 회수하고 중 하나를 사용하여 제대로 문자열을 연결할 수 있습니다 :

    경우 여기 아니며, 따라서 당신이 잘못 구문은 컴파일 타임 오류가 발생

...

ChatColor.RED.toString() + ok 
or 
ChatColor.RED + Integer.toString(ok)
+1

(ChatColor.RED + ""+ ok)도 작동합니다. – Jojodmo

+0

@Jojodmo' ""+ ChatColor.RED + ok'도 같이 작동합니다. 첫 번째''+ ChatColor.RED'는 문자열 연결 시퀀스를 생성합니다.그러나 이것은 차선의 연산 인 빈 문자열 리터럴을 정의합니다. – Unihedron

+0

아주 사실, 그냥 지적해라. – Jojodmo

0

문제는 lore()의 매개 변수가 문자열이라는 점입니다. 그래서 당신은이 작업을 수행해야합니다

lore.set(1, ChatColor.RED + "" + ok); 

이 지금은 작동합니다.

관련 문제