2016-09-16 3 views
-3

나는 당신이 여기 https://www.hackerrank.com/contests/programming-jam-2-0/challenges/math-practice자바 연습 프로그램 PROB

당신은 당신의 아이가 자신의 수학을 연습하는 데 도움이되는 전략을 고안 한 질문을 볼 수 있습니다 HackerRank 에서이 문제를 해결했다. 우선, 양의 정수 N을 선택합니다. 그러면 N, 3 × N, 5 × N, 7 × N 등의 이름을 지정하도록 아이에게 지시합니다.

그는 이름을 지정할 때마다 해당 숫자의 모든 숫자를 생각합니다. 그는 자신이 지명 한 숫자의 일부인 한 번 이상 본 숫자 (0, 1, 2, 3, 4, 5, 6, 7, 8 및 9)를 추적합니다. 그는 한 번에 적어도 열 자리의 각을 본 후에, 그는 또한

내 코드를 연주 이동하도록 허용하지만 제출할 때 그것은 나에게 (표준 출력에 응답)를 제공하지 내가 코드를 수정 많은 시간과 실수 어디 있는지 모르겠어 사람이 로컬 디버그

package contest; 

import java.util.ArrayList; 

import java.util.Scanner; 

/** 
* 
* @author Mohamed 
*/ 
public class Solution 
{ 
    public static void main(String [] s){ 
     Scanner In = new Scanner(System.in); 
    int number = In.nextInt(); 
    int counter = 1; 
    int length; 
    int oneDigit; 
    int newNumber; 
    int index; 
    boolean condition = true; 
    int [] arr = new int[10]; 

    ArrayList<String> theList = new ArrayList<>(); 

    while(condition = true){ 
     length = (int)(Math.log10(number) + 1); 
     newNumber = number; 
     while(length > 0) 
     { 
      oneDigit = newNumber % 10; 
      newNumber = newNumber/10; 

      if(arr[0] != oneDigit && arr[1] != oneDigit && arr[2] != oneDigit  && 
       arr[3] != oneDigit && arr[4] != oneDigit && arr[5] != oneDigit && 
       arr[6] != oneDigit && arr[7] != oneDigit && arr[8] != oneDigit && 
       arr[9] != oneDigit) 
      { 
       String num = String.valueOf(oneDigit); 
       theList.add(num); 
       index = theList.lastIndexOf(num); 
       arr[index] = oneDigit; 
      } 
      if(newNumber == 0){ 
       length = 0; 
      } 
      else{ 
       length = (int)(Math.log10(newNumber) + 1); 
      } 
     } 
     counter = counter + 2; 
     if(arr[9] != 0) 
     { 
      System.out.println(number); 
      condition = false; 
     } 
     number = number * counter; 
     } 
     } 
    } 
+2

'동안 (조건 = 참), 그리고는 다음과 같습니다 설정은 다음과 같이한다 중복

코드를 허용하지 않습니다 또한 표현의 결과. 'while (condition == true)'를 의미했을 수도 있지만, 그 중 하나를 쓰지 말고 대신'while (condition)'이라고 써주십시오. – Andreas

+2

IMO, HackerRank에 대답하는 가장 좋은 방법은 코드를 HackerRank에 완전히 쓰지 않는 것입니다. –

+1

@ cricket_007 동의 함. 항상 IDE를 사용하여 코드를 작성하고 테스트하십시오. 이 경우, IDE는'while (condition = true) '문제에 관해 당신에게 이야기했을 것이다. – Andreas

답변

0

표시된 숫자를 누를 때 세트를 사용하십시오. 당신이 변수에`TRUE '를 지정하고 있기 때문에, 영원히 반복됩니다`

Scanner In = new Scanner(System.in); 
int number = In.nextInt(); 
int index = 1; 
int newNum; 
String message = ""; 
Set<Integer> numbersSeen = new HashSet<Integer>(); 

while(true) 
{ 
    newNum = number*index; 
    message += "N ="+number*index+". Now he has seen the digits "; 
    while(newNum > 0) { 
     numbersSeen.add(newNum % 10); 
     newNum /= 10; 
    } 
    for(Integer seenNum : numbersSeen) { 
     message += seenNum +", "; 
    } 
    System.out.println(message.substring(0,message.length()-2)); 
    message = ""; 
    index +=2; 
    if(numbersSeen.size() == 10) { 
     break; 
    } 
} 
-1

그것을 도움이 될 수 있습니다주세요! 어떤 조건에 따라 하나의 println이 있습니다. 이 조건이 충족되지 않으면 아무 것도 인쇄되지 않습니다.

또한 코드를 좀 더 이해하기 쉽도록 리팩토링하는 것이 좋습니다. 의미있는

  • 이름 바꾸기 조건 변수. isArray9Zero와 같습니다. arr[9] != 0 일 때만 알고리즘이 중지되는 이유는 무엇입니까?

  • 길이가 i에서 벗어난 명명 된 함수를 만듭니다. f(arr[0] != oneDigit. 거기에서 무엇이 체크되고 있습니까?