2016-06-26 3 views
-5
public static void main(String[] args) {   
    Scanner in = new Scanner(System.in);  
    String s = in.nextLine();   
    String l,b;   
    for(int i=0;i<(s.length()-2);i++) { 
    if(i==0) { 
     l=s.substring(i,i+3);  
     s.substring(i,i+3).compareTo(s.substring(i+1,i+4))>0 
      ? l=s.substring(i,i+3) 
      : l=s.substring(i+1,i+4); // assigned values 
     s.substring(i,i+3).compareTo(s.substring(i+1,i+4))<0 
      ? b=s.substring(i,i+3) 
      : b=s.substring(i+1,i+4); 
    } 

왜 변수 i와 b가 할당되지 않았습니까?3 진 연산자를 사용하는 동안 할당되지 않은 변수 오류

+4

Downvoting을하기 때문에 완전히 끔찍한 코드 스타일의. 진지하게, 당신이 사람들에게 당신의 코드를 읽게하고 싶다면 이것보다 더 잘 할 필요가있다. IMO, 이건 무례한 일이야. –

+0

Niall Cosgrove 님이 저의 도움으로 조금 고쳐 주셨습니다 – ajb

+0

힌트 :이 코드의 형식이 올바르게 지정되어 있어도 여전히 끔찍합니다. 예를 들어 로버트 마틴 (Robert Martin)이 "클랜 코드 (Cleancode)"를 연구하여이 코드를 얼마나 향상시킬 수 있는지 이해하고 싶습니다. – GhostCat

답변

0

첫째, 당신은 하지둥지l에 할당하고 같은 b이 일을하려고 할 나타날 수 있습니다 (그리고 을 시도하고 모두 같은 값을 할당하는 방법도 같다). 당신은

for (int i = 1; i < (s.length()-2); i++) { 
    // ... 
} 

처럼 초기 루프 조건 1

b = l = s.substring(0, 3).compareTo(s.substring(1, 4)) > 0 ? 
     s.substring(0, 3) : s.substring(1, 4); 

처럼 루프 전에 그렇게 할 수있는 루프가 1에서 시작하면 0을 테스트 할 필요가 없습니다.

0

3 진 표현식의 목적은 값을 반환하는 것입니다. 특히, 표현식은 조건에 따라 두 가지 가능한 값 중에서 선택된 값을가집니다. 그런 다음이 값은 다른 표현식을 사용할 수있는 모든 위치에서 사용할 수 있습니다 (예 :

x = (isSomeTestTrue()) ? 2 : 5; 
System.out.println((isSomeOtherTestTrue()) ? "this" : "that"); 

당신은 if 문 대신에 그것을 사용하려는. 즉, 당신은 ?: 지역에서 작동합니까 문을 가하고, 그리고 식의 값을 무시하고있다 :

s.substring(i,i+3).compareTo(s.substring(i+1,i+4)) > 0 
    ? l = s.substring(i,i+3) 
    : l = s.substring(i+1,i+4); 

그렇게하지 마십시오. 이것은 삼항 표현이 필요한 것이 아닙니다. 그리고 그것은 항상 작동하지 않을 것입니다. (나는 규칙의 복잡성이 있지만 그것들을 알아 내려고 노력하고 있지만 이것과 같은 삼항 식을 사용하면 l의 "확실한 배정"을위한 규칙을 만족시킬만큼 충분하지 않을 것이라고 생각합니다.). 참고 : Perl 또는 JavaScript와 같은 일부 언어에서는 허용되는 관용구 일 수 있습니다. 하지만 Java 또는 C#에서이 작업을 수행해야한다고 생각하지 않습니다.

두 개의 명령문이 있고 조건이 true이면 하나를 실행하고 false이면 다른 명령문을 실행하려면 if을 사용하십시오.

if (s.substring(i,i+3).compareTo(s.substring(i+1,i+4)) > 0) { 
    l = s.substring(i, i+3); 
} else { 
    l = s.substring(i+1, i+4); 
} 

또는,이 경우, 당신은 삼항 연산자를 사용할 수 있고 l에 결과를 할당합니다

l = (s.substring(i, i+3).compareTo(s.substring(i+1, i+4)) > 0) 
     ? s.substring(i, i+3) 
     : s.substring(i+1, i+4); 
관련 문제