2016-05-01 5 views
3

私は説明ジェネレータを作成しており、テキストファイルを ":"で分割しています。したがって、テキストファイルに「dog:fish:cat:bird」がある場合、私のコードは「:」でそれを分割し、ランダムに選択します。しかし、エンディング結果をプリントアウトすると、出力はすべて同じになります。それは配列内の単語をランダムに選ぶでしょうが、もし私がそれを4回生成すると言うなら、4回同じ事になります。では、私のロジックはどうやってこれにアプローチするのが間違っていますか?私はそれが4つのランダムな異なるものを印刷したい。私のコードは以下の通りです:それは、生成されるために、私が入って何度でも「汗をかいた魚」:だからループの都合で文字列の配列をランダムにする方法

パブリッククラスジェネレータ {

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);} 

、私の出力は次のように印刷します。私は3つの説明を入力した場合、どのように "汗の魚"、 "臭い犬"、 "遅い魚"と言うことができますか?何か助けてくれてありがとう。

+0

私は、あなたは "無作為の動物を得る"と "ループの中に"ランダムな形容詞のコードブロックを入れる必要があると思う。 – Surely

答えて

2

rndAnimalrandomAdjの値がforループの外側にあるという問題があります。したがって、値はランダムにとなり、のみが4回表示されます。問題を解決するには、ループ内の2つのStringに値を割り当てます。

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

それは間違いありません。しかし、私はそこにいくつかの他のランダムなオブジェクトを持っており、私は "ラインが見つかりませんエラー"を取得します。私のランダムなオブジェクトの順序は、nextLine、next、nextLine、nextLine、nextLine、nextLineです。私はそのアレイを2度そこから取ってくるので、隣にあるものを持っています。そして、nexLineとそれをちらっと見せていますが、それを得ることはできません。それは混乱して聞こえますが、どんな考えですか? –

+0

これを解決するには、最初にオブジェクトのスコープの世話をしてから、テキストファイルをチェックすることをお勧めします。ファイルI/Oに問題があるかもしれませんが、その解決策を探すことはできますが、問題の助けを求める問題は既に解決されています。それが役立つかどうかを見てください。 –

+0

あなたのコードをさらに調べた後、forループにすべてを入れると、他の行の単語が必要になります。それは、テキストファイル内のランダムな単語をその行だけから取らなければならないので、私は行が見つかりませんでしたエラーです。 –

関連する問題