私は、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;
}
}
説明を書き直すことを検討してください。 –
random == populate [b] == populate [i]はどうでしょうか?私はあなたが配列を使用している方法を再考するだろう。ヒント:ハッシュテーブルのデータ構造を考える。 populate()の – dbustosp
では、内側のforループは絶対に何もしません。 populate [i]はすでにループの前にランダムに割り当てられています。あなたは間違って割り当てられたと思います。 – Shiping