2017-02-26 3 views
0

필자는 populate 배열이 증가함에 따라 메소드가 채워짐에 따라 값이 동일하면 위의 인덱스를 확인합니다. 그러나 각 인덱스를 개별적으로 처리하지 않으면 어떻게해야 비효율적인지 알 수 없습니다. 나는 for 루프를 만들려고했는데, I 값이 0이고 1 씩 증가했다. 그 안에 for 루프는 b 값이 1이고 또 1 씩 증가한다. 두 번째 for 루프 안에 if 문과 if 문이있다. 는 I 지수가 B 지수와 동일한 경우는 I 지수는 나는 간단한 생각하고 쉽게 당신이 할 수 변경을 구현하기 위해배열에서 중복을 어떻게 제거합니까?

public class CH7Ass { 

public static void main(String[] args) { 
    int user; 
    int[] array; 
    int checkUserNum; 
    int tries=0; 
    System.out.println("I bet you can't guess my six numbers");  
    array=populate(); 
    do{ 
    tries++; 
    user=getUserNum(); 
checkUserNum=checkUserNum(user,array); 
array=removeFromArray(array,checkUserNum); 
    }while(tries<6); 
} 




public static int[] populate(){ 
    int[] populate; 
    populate= new int [6]; 
    int random; 

    for(int i=0;i<populate.length;i++){ 
     random=(int) ((Math.random())*50);  //goes from 0-49 
     populate[i]=random; 
     System.out.println(populate[i]); 
     for(int b=1;b<populate.length;b++){ 
      if(populate[b]==populate[i]){ 
       populate[i]=random; 

      } 
     } 

    } 
    return populate; 
} 


public static int getUserNum(){ 
    int getUserNum; 

    do{ 
    System.out.println("Please input a number from 1 to 49:"); 
    getUserNum=TextIO.getInt(); 
    }while((getUserNum<1)||(getUserNum>49)); 




    return getUserNum; 
} 

public static int checkUserNum(int getUserNum,int[] array){ 
    boolean check=false; 
    int checkUserNum = 0; 
    for(int i=0;i<array.length;i++){ 
     if(array[i]==getUserNum){ 
      check=true; 
      System.out.println("You got it"); 
     checkUserNum=i; 


     } 

    } 
    if(check==false){ 
     checkUserNum=-1; 
     System.out.println(checkUserNum); 

    } 



    return checkUserNum; 

} 


private static int[] removeFromArray(int[] array,int checkUserNum){ 
    int[] removeFromArray; 
    if(checkUserNum!=-1){ 
     array[checkUserNum]=0; 
     removeFromArray=array[checkUserNum]; 
    } 
    return removeFromArray; 
} 

} 내가 더으로 생각하지

+0

설명을 다시 작성하십시오. –

+0

random == populate [b] == populate [i]는 어떻게됩니까? 배열을 사용하는 방식을 다시 생각해 보겠습니다. 힌트 : 해시 테이블 데이터 구조를 생각해보십시오. populate()에서 – dbustosp

+0

, 내부 for 루프는 절대적으로 아무것도하지 않습니다. populate [i]는 이미 루프 앞에 무작위로 할당되어 있습니다. 실수로 과제를받은 것 같아요. – Shiping

답변

0

알고리즘의 전문가를 의미 다시 재평가되지만, make는 다음과 같습니다.

알고리즘을 반복 할 때마다 b = 1에서 내부 루프를 시작하는 대신 b = i + 1에서 시작할 수 있습니다. 이것은 외부 루프의 인덱스 i에 있다면, i보다 작은 모든 인덱스를 이미 배열의 나머지와 비교했기 때문에 동일한 결과를 얻을 수 있습니다.

+0

오른쪽에서는 index [1]이 1,4,6,7 중 하나로 무작위 배정 된 경우 {1,2,2,4,6,7}이 있다고합니다. 나는 잠시 동안이 문제에 갇혀 있었고, 내가 가지고 있다고 생각할 때마다 나는 다시 구멍으로 빠져 든다. –

0

for 루프가 작동하면서 증가하는 최소 최대 값을 설정하면됩니다. 그렇게하면 난수에 대한 경계를 설정하고 서로 다른 경계 내에있게됩니다.

public static int[] populate(){ 
    int[] populate = new int [6]; 
    int random = 0; 
    double maximum = 0.0; 
    for(int i=0;i<populate.length;i++){ 
     maximum += (50/6); 
     random = (Math.random() * ( maximum - (8 * i) ) + (8 * i)) ;  
     populate[i] = random; 
    } 
    return populate; 
} 
관련 문제