2016-10-07 8 views
1

ランダム・ワード・ジェネレータを作成しましたが、希望の出力の前に同じ行に "null"という文字が表示されています。

ここに私のコードです:意図した出力の前にジェネレータが印刷されています

import java.util.Random; 

public class wordGenerator { 

private static String r,s; 

public static void randChar(int x) { 

    Random rand = new Random(); 
    x = rand.nextInt((26 - 1) + 1) + 1; 

    switch(x) { 
    case 1: r = "a"; break; 
    case 2: r = "b"; break; 
    case 3: r = "c"; break; 
    case 4: r = "d"; break; 
    case 5: r = "e"; break; 
    case 6: r = "f"; break; 
    case 7: r = "g"; break; 
    case 8: r = "h"; break; 
    case 9: r = "i"; break; 
    case 10: r = "j"; break; 
    case 11: r = "k"; break; 
    case 12: r = "l"; break; 
    case 13: r = "m"; break; 
    case 14: r = "n"; break; 
    case 15: r = "o"; break; 
    case 16: r = "p"; break; 
    case 17: r = "q"; break; 
    case 18: r = "r"; break; 
    case 19: r = "s"; break; 
    case 20: r = "t"; break; 
    case 21: r = "u"; break; 
    case 22: r = "v"; break; 
    case 23: r = "w"; break; 
    case 24: r = "x"; break; 
    case 25: r = "y"; break; 
    case 26: r = "z"; break; 
    default: r = "|null|"; 
    } 

    if(x != 1 && x != 5 && x != 9 && x != 15 && x != 21) { 
     int h = rand.nextInt(4 - 0); 
     if(h == 2) { 
      int k = rand.nextInt(6 - 0); 
      switch(k) { 
      case 1: r = "a"; break; 
      case 2: r = "e"; break; 
      case 3: r = "i"; break; 
      case 4: r = "o"; break; 
      case 5: r = "u"; break; 
      } 
     } 
    } 

} 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    Random rand = new Random(); 
    int y = rand.nextInt((10 - 4) + 1) + 4; 

    for(int z = 1; z < y; z++) { 
     randChar(0); 
     s = s + r; 
    } 

    System.out.println(s); 
} 

私にとって、それは罰金だが、私はそれを出力すべき何か

ようopfruvme

考えるとき、それは

を印刷しますnullopfruvme

どうしたの?

+0

'nullopfruvme'または' | null | opfruvme'を出力しますか?ところで、 '(26 - 1)+ 1'は26. –

+0

' nullopfruvme'です。 –

+1

まず最初に、すべてのケースが悪いコードデザインです。数字をASCIIに直接変換する必要があります。 r =(char)x + 96 –

答えて

3

sを初期化していません。

private static String r,s=""; 

あなたがループ内でアプリケーションを起動すると声明s = s + r;は、最初のサイクルでrと連結する前にnull値をとります。変数を空の文字列で初期化すると、期待した結果が得られます。

1

あなたがs"null" + rが割り当てられますので、そうして初めてs = s + r;ラインは、文字列に強制変換されますsnull)の現在の値を実行し、sを初期化しませんでした。

関連する問題