2017-09-25 3 views
-1

여기에 toRepeat이라는 문자열을 취하여 같은 행에서 n 번 반복하는 코드가 있습니다. 예를 들어 toRepeat = *, N = 3, 결과 = *** Error : 2 진수 연산자 '+'에 대한 잘못된 피연산자 유형

public class RepeatIt { 
    public static String repeatString(final Object toRepeat, final int n) { 
     int i = 0; 
     if (toRepeat instanceof String) { 
      while (i < n) { 
       toRepeat = toRepeat + toRepeat; 
      } 
      return toRepeat; 
     } else { 
      return "Not a string"; 
     } 
    } 
} 

그러나 나는 이항 연산자 + 나쁜 피연산자 유형을 말한다 2 toRepeat 사이의 + 기호에 오류가 발생합니다. 이 문제를 어떻게 해결할 수 있는지 알고 있으면 감사하겠습니다.

+0

당신은 다운 캐스팅을 사용해야합니다. – isaace

+0

루프는 언제해야합니까? 'i' 또는'n'을 절대 변경하지 않으므로 while 루프가 영원히 반복됩니다. – azurefrog

+0

또 다른 대안은'+'연산자 대신에 문자열'concat' 메서드를 사용하는 것입니다. – tommyO

답변

1

당신은 변경할 수 있습니다

while (i < n){ 
    toRepeat = toRepeat + toRepeat; // operations are not defined for type Object 
} 
return toRepeat; 

편집


String tr = (String)toRepeat; // cast to String while (i < n){ tr = tr + tr; // valid on String i++; // some condition to terminate } return tr; 

에 : StringBuilder를 사용 @oleg에 의해 제안 루프에서 문자열을 연결 선호한다.


Edit2가 :

String tr = (String)toRepeat; // this would be * 
String finalVal = ""; 
while (i < n){ 
    final = finalVal + tr; // would add * for each iteration 
    i++; 
} 
return finalVal; 
+1

그래, 고마워요. – CWilliams

+1

for 루프가 더 쉬울 수도 있습니다. –

+0

** 사용하지 마십시오! ** ** ** 큰 실수입니다 **. 루프 내에서 문자열을 연결하지 마십시오. 각 루프 반복은 ** 새 문자열 **을 만듭니다. 문자열 풀의 결과로 n 개의 다른 문자열 객체를 얻을 수 있습니다! 루프에서 수행해야하는 경우 ** StringBuilder **는 귀하의 친구입니다. –

1

세 가지 오류가 여기에 실제로있다 : 첫 번째는 toRepeat의 유형 Object이다 한 번에 하나 개의 문자를 증가하려면, 당신은 뭔가를 할 수 있습니다 (그리고 그것은 final입니다. 즉, 새 값을 할당 할 수 없습니다) : Object에 대해 +이 없습니다. 전에 답변에 표시된대로 String으로 전송할 수 있습니다. 두 번째 : i0이므로 루프가 종료되지 않습니다. 세 번째로 : i을 증분하면 (예 : 루프에서 i += 1) 첫 번째 루프 이후에 **, 두 번째 후에는 ****, 세 번째 루프 이후에는 8 개의 별이 표시됩니다.

+0

그래서 다른 문제는 해결되었지만 어떻게하면 하나의 값으로 증가 할 수 있습니까? – CWilliams

+0

tr + tr과 같은 연결로 문자열을 대체하지는 않지만 tr + toRepeat를 concat으로 바꾸십시오. – Stefan

0

저는 Apache lib가 대부분의 경우 도움이 될 수 있다고 생각합니다. String으로 작업 할 수있는 많은 유용한 메소드가 포함 된 StringUtils 클래스가 들어 있습니다. 이것들 중 하나입니다 :

public class RepeatIt { 
    public static String repeatString(final Object toRepeat, final int n) { 
     return toRepeat instanceof String ? org.apache.commons.lang3.StringUtils.repeat((String)toRepeat, n) : "Not a string"; 
    } 
} 
관련 문제