2015-02-04 7 views
-2

안녕하세요 덜 중복 다음과 같은 방법이 있는지 궁금합니다. 여기서 'ones', 'twos', 'threes'등은 인스턴스 변수입니다. (switch 문은 case 인수가 될 수 없습니다).짧게 계산서

private int methodX(){ 

    int consec=0; 

    if(ones==1){ 
     consec++; 
    } 
    if(twos==1){ 
     consec++; 
    } 
    if(threes==1){ 
     consec++; 
    } 
    if(fours==1){ 
     consec++; 
    } 
    if(fives==1){ 
     consec++; 
    } 
    if(sixes==1){ 
     consec++; 
    } 
    if(consec>=4){ 
     return 30; 
    } 
    else { 
     return 0; 
    } 
} 
private int ones; 
private int twos; 
private int threes; 
private int fours; 
private int fives; 
private int sixes; 
+0

가능하면 많은 변수 대신 단일 배열을 사용하고 루프를 사용할 수 있습니다. –

+0

Java에서 내장형'boolean -> {0,1}'함수를 찾을 수 없다는 믿음이 없습니다 ... –

+0

많은 감사합니다! @GovindBalaji – Daniel

답변

1

이러한 경우에 좋은 트릭은 ifs 대신 함수를 작성하는 것입니다.

큰 이득은 아니지만 코드에 선명도가 있습니다. 당신이 복사하여 붙여 넣기를 할 수 있다면, 당신은 함수를 만들 수 있습니다

void incrementIfEqual(int what, int value) 
    { 
     if (what==value) 
      consecs++; 
    } 

는 당신이 알고 엄지 손가락의 좋은 규칙이다

{ 
     incrementIfEqual(ones,1); 
     incrementIfEqual(twos,1); 
     ... 
     incrementIfEqual(sixes,1); 
    } 

을 가질 수 있습니다.

+0

op에 대한 작은 추가 : 동일한 규칙에 따라 정수는 배열에 있어야합니다. – runDOSrun

0

당신은지도 또는 목록 또는 배열 인스턴스 변수를 교체 한 후 루프를 처리 할 수 ​​있습니다 :

for (String key : counts){ 
    if (counts.get(key) == 1 
     consec++ 
} 
+0

문자열을 "=="로 비교하면 편집을 제안합니다. – runDOSrun

+0

@runDOSrun 그는 문자열을 어디에서 비교합니까? '1'도 문자열도 아니고'counts.get (key)'도 반드시 문자열입니다. – Tom

+0

그게 내 잘못이야! – runDOSrun

0

당신은 아마 다시 코드를 확인해야합니다. if 또는 else를 사용하고 싶습니까? switch 문은 if-else 문이 수행 할 작업을 정확히 수행합니다.

+0

글쎄, 그의 경우에 대한 예를 들어 줄 수 있니? – Tom

0

이런 식으로 연속 롤을 추측하는 대신, 더 간단한 방법은 숫자를 굴릴 때 이것을 확인하는 것이므로이 코드가 필요하지 않습니다.

4 개의 주사위를 돌릴 때 4 개의 다른 롤이 나오는지 확인하고 싶다고합시다.

Random rand = new Random(); 
long uniqueRolls = IntStream.range(0, 4) 
          .map(i -> rand.nextInt(6) + 1) 
          .distinct().count(); 
if (uniqueRolls == 4) 
    System.out.println("They were all different"); 

혹시 메소드를 호출하고 싶다고해서 메소드를 변경할 필요가 없다고 생각됩니다.

1

6면의 주사위 두 개를 굴린 다음 동일한면의 연속 롤 수를 계산하려고합니다. 얼굴을 입력하고 얼굴이 동일한지 확인할 수 있습니다.

private boolean Same(int i, int j){ 
return (a==b); 
} 

다음 비교할 때마다 호출합니다.

if(Same(i,j))consec++; 

또는 간단한 방법이있다 :

if(i==j)consec++; 

다른 곳에서 그것을 확인할 필요가없는 경우.