2017-02-26 3 views
0

私は、populate配列が増えるにつれてメソッドが移入されるので、値が同じであれば上記のインデックスをチェックするようにしています。しかし、私は個々の指標を個別に調べることなく、それをいかにして非効率的にするかはわかりません。私はforループを作成しようとしたところ、Iの値が0で、1だけ増え、その内側のforループはbの値が1で、それも1だけ増加します。forの2番目のforループの中にif文とIインデックスはI指数は再びどのようにdupicatesを配列から削除しますか?

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

を再評価されたBインデックスと同じである場合、私は何もでていないアルゴリズムの専門家を意味するが、私は1つの単純なと修正にあなたの実装が容易にできると思いますmakeは次のようになります。

アルゴリズムの繰り返しごとに、内側ループをb = 1に開始する代わりに、b = i + 1から開始することができます。これは、外部ループのインデックスiにある場合は、すでにiより小さいすべてのインデックスを配列の残りの部分と比較しているため、同等の結果が得られます。

+0

右は、インデックス[1]が1,4,6,7のいずれかにランダム化された場合、{1,2,2,4,6,7}とします。私はしばらくの間この問題に立ち往生していました。私はそれを持っていると思うたびに、私はちょうど再び穴を通り抜けます。 –

0

forループが機能するにつれて増加するmin max値をいくつか設定することで、これを行うことができます。そうすることで、乱数の境界を設定し、それらが異なる境界内にあるように強制します。

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; 
} 
関連する問題