2017-02-26 6 views
0

Ich versuche zu machen ist so, dass in der Methode auffüllen, wie das Populate-Array erhöht es den Index oben überprüft, wenn der Wert derselbe ist. Ich habe jedoch keine Ahnung, wie ich das machen könnte, ohne jeden Index einzeln durchzugehen, was ihn sehr ineffizient macht. Ich habe versucht, eine for-Schleife, wo der I-Wert ist 0 und erhöht sich um 1 und innerhalb dieser for-Schleife ist eine andere for-Schleife mit dem b-Wert ist 1 und das erhöht sich auch um 1. Innerhalb der zweiten for-Schleife habe ich eine if-Anweisung und wenn der Index I auf den b-Index wird der Index I aufgewertet wiederWie entfernen Sie Dupicates aus einem Array?

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

erwägen, Ihre Beschreibung neu zu schreiben. –

+0

Was ist, wenn random == populate [b] == populate [i]? Ich würde überdenken, wie Sie das Array verwenden. Tipp: Denken Sie an Hash-Datenstruktur. – dbustosp

+0

in populate(), macht die innere for-Schleife absolut nichts. populate [i] ist bereits vor der Schleife zufällig zugewiesen. Ich nehme an, Sie hatten die Aufgabe versehentlich. – Shiping

Antwort

0

ich nicht bin gleich ist ein Experte in Algorithmen bedeutet, aber ich denke, eine einfache und leichte Modifikation zu implementieren Sie könnten make wäre das folgende.

Bei jeder Iteration Ihres Algorithmus, anstatt die innere Schleife bei b = 1 zu starten, könnten Sie es bei b = i + 1 starten. Dies würde zu einem äquivalenten Ergebnis führen, da Sie, wenn Sie sich am Index i der äußeren Schleife befinden, bereits alle Indizes kleiner als i mit dem Rest des Arrays verglichen haben.

+0

richtig sagen wir haben {1,2,2,4,6,7} was, wenn der Index [1] entweder auf 1,4,6,7 randomisiert wird. Ich habe eine Weile an diesem Problem festgeklebt und wann immer ich denke, dass ich es habe, falle ich einfach wieder durch das Loch. –

0

Sie könnten dies tun, indem Sie einige Min Max-Werte einrichten, die sich erhöhen, wenn Ihre For-Schleife arbeitet. Auf diese Weise legen Sie Grenzen für die Zufallszahl fest und zwingen sie dazu, innerhalb verschiedener Grenzen zu sein.

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; 
} 
Verwandte Themen