2011-03-04 2 views
2

일련의 변수로 출력 문자열을 포맷하고 싶습니다.printf를 int 배열로 포맷 할 수없는 이유는 무엇입니까?

String[] myArray = new String[3]; 
// fill array with strings 
System.out.printf("1: %s \n2: %s \n3: %s\n", myArray); 

내가 시뮬레이션의 결과 주사위를-던졌습니다 인쇄하려면이 옵션을 사용하려면, 그래서 int 배열을 사용 : 내가 문자열 배열을 사용하는 경우,이 예상대로 작동합니다. 나는 모든 요소에 대한 myArray[0] 등을 사용할 수 있습니다, 물론

int[] myArray = new int[3]; 
// fill array with numbers 
System.out.printf("1: %d \n2: %d \n3: %d\n", myArray); 
Exception in thread "main" java.util.IllegalFormatConversionException: d != [I 

, 그러나 이것은 매우 우아하지 않는 것 : 그러나이 작동하지 않습니다.

왜 이렇게되어 원하는 결과를 얻을 수 있습니까?

out.printf("%s:%s", new Object[] { a, b }); 

에 돌아 가지 : 그래서의 동등한

public PrintString printf(String format, Object... args);

out.printf("%s:%s", a, b); 

입니다 : 우리가 0 T0 N 인수를 전달할 수 있도록

+0

이 경우 루프 또는 다른 것을 사용하는 것이 더 좋지 않습니까? – Svish

답변

3

printfString (형식 문자열) 및 임의의 수의 인수 (서식 지정)를 취하는 variable argument method입니다.

Varargs는 Java의 배열로 구현됩니다. printf은 해당 가변 유형으로 Object을 예상하므로 내부 유형은 Object[]입니다.

String[]은 -입니다. 즉, String[]의 요소는 별도의 인수로 해석됩니다.

그러나 Object[]으로 캐스팅 할 수 없으므로 int[] 그 자체가 varargs 배열의 첫 번째 요소입니다. int[]는 (단일) 진수가 아니기 때문에

그런 다음 당신은 작동하지 않습니다 int[] 사용 %d를 포맷하려고합니다.

0

의 printf는 변수 인수를 사용 귀하의 질문, 배열에 대해, 당신은 쓸 수 있습니다 :

out.printf("%s:%s", things); 
3

이것은 String이 참조 유형입니다 (즉, 서브 클래스는 Object), int은 기본 유형입니다. printf 메서드는 Object (실제 가변 길이 인수 목록)의 배열을 필요로하므로 String[]이 적합합니다. int[]을 전달할 때마다 intObject이 아니지만 int[]은 전체이므로 int[]이 하나의 개체로 간주되어 하나의 인수로 간주됩니다.

+0

+1보다 정확한 설명은 – Thomas

+0

입니다. @ 토마스 : 고마워요. – MAK

2

int가 아닌 반면 String은 객체입니다.
printf은 매개 변수에 대해 Object 배열을 사용합니다.
대신 Integer[] myArray을 시도하십시오.

관련 문제