我试图使得在填充数组增加的方法填充时,如果值相同,则检查上面的索引。但是,我不知道如何在不单独检查每个索引的情况下执行此操作,从而使其效率极低。我试图创建一个for循环,其中I值为0并且增加1并且在for循环中是另一个for循环,b值为1并且也增加1.在第二个for循环中我有一个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)
我绝不是算法专家,但我认为你可以做的一个简单易行的修改如下:
在算法的每次迭代中,您可以在b = 1
处启动,而不是在b = i + 1
处启动内循环。这将产生一个等价的结果,因为如果你在外部循环的索引i,你已经将小于i的所有索引与数组的其余部分进行了比较。
答案 1 :(得分: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;
}