2016-05-01 5 views
3

Also mache ich einen Beschreibungsgenerator und teile eine Textdatei mit einem ":". Wenn also die Textdatei "Hund: Fisch: Katze: Vogel" enthielt, teilt mein Code sie im ":" auf und wählt zufällig eine aus. Wenn ich jedoch meine Endergebnisse drucke, ist die Ausgabe gleich. Es wird nach dem Zufallsprinzip die Wörter im Array auswählen, aber dann, wenn ich sagte, es 4 mal generieren, wäre es dasselbe 4 mal. Wo ist meine Logik falsch, wie kann ich das angehen? Ich möchte 4 verschiedene zufällige Dinge drucken. Mein Code ist unten:Wie ein Array eines Strings randomisiert, so dass es jedes Mal anders durch die Schleife ist

public class Generator {

public static void main(String[] args) 
{ 
    Scanner scanner = new Scanner(System.in); 
    Random r = new Random(); 

    System.out.print("Enter a file name: "); 
    String fName = scanner.nextLine(); 
    File infle = new File(fName); 
    Scanner read = new Scanner(infle); 

    System.out.print("Enter number to make: "); 
    int things = scanner.nextInt(); 
    System.out.println(); 
    System.out.println("Here are " + things + " things: "); 
    System.out.println(); 


    //gets random animal 
    String animal = read.nextLine(); 
    String[]anm1 = animal.split(":"); 
    int rnd_Animal = r.nextInt(anm1.length); 
    String rndAnimal = (anm1[rnd_Animal]); 


    //gets random adjective 
    String adj = read.next(); 
    String []adj1 = adj.split(":"); 
    int rndAdj = r.nextInt(adj1.length); 
    String randomAdj = (adj1[rndAdj]); 


    for(int i=0; i <things; i++) 
    { 
     System.out.println(randomAdj + " " + rndAnimal);} 

Also, meine Ausgabe wie gedruckt werden würde: "verschwitzt Fisch" so oft wie ich es eingegeben erzeugt werden. Wie kann ich sagen "verschwitzter Fisch", "stinkender Hund", "langsamer Fisch", wenn ich 3 Beschreibungen eingegeben habe, um generiert zu werden? Danke für jede Hilfe.

+0

Ich denke, Sie müssen die "bekommt zufälliges Tier" und "bekommt zufällige Adjektiv" Code-Block innerhalb der for-Schleife. – Surely

Antwort

2

Das Problem ist, dass Sie den Wert für rndAnimal und randomAdj außerhalb der for-Schleife zu bekommen. So bekommt es den Wert zufällig ONLY ONCE und zeigt es viermal an. Um das Problem zu lösen, weisen Sie den Wert den beiden Strings innerhalb der Schleife zu.

for(int i=0; i<things; i++){ 

    //gets random animal 
    String animal = read.nextLine(); 
    String[]anm1 = animal.split(":"); 
    int rnd_Animal =r.nextInt(anm1.length); 
    String rndAnimal =(anm1[rnd_Animal]); 

    //gets random adjective 
    String adj = read.next(); 
    String []adj1 = adj.split(":"); 
    int rndAdj = r.nextInt(adj1.length); 
    String randomAdj = (adj1[rndAdj]); 

    System.out.println(randomAdj + " " + rndAnimal); 
} 
+0

das ist es definitiv. Allerdings habe ich ein paar andere zufällige Objekte drin und ich bekomme einen "no line found error". Die Reihenfolge meiner Zufallsobjekte lautet: nextLine, nextLine, nextLine, nextLine, nextLine, nextLine. Ich habe den nächsten da drin, weil es zweimal von diesem Array ausgeht und ich flippe die nexLine und nächste herum, aber ich scheine es nicht zu bekommen. Irgendeine Idee, auch wenn das verwirrend klingt? –

+0

Um das zu lösen, würde ich vorschlagen, dass Sie zuerst den Umfang der Objekte und dann die Textdatei überprüfen. Sie haben möglicherweise ein Problem mit der Datei-E/A, und Sie könnten nach einer Lösung dafür suchen, aber das Problem, für das Sie in der Frage Hilfe anfordern, ist bereits gelöst. Sehen Sie, ob es hilft. –

+0

Nach weiterem Untersuchen Ihres Codes, Wenn ich alles in die for-Schleife setze, werden Wörter von anderen Zeilen benötigt, was nicht notwendig ist. Es muss die zufälligen Wörter in der Textdatei nur von dieser Linie nehmen und deshalb bekomme ich einen Fehler, der nicht gefunden wurde. –

Verwandte Themen