2017-02-23 11 views
0
import java.util.Random; 
import java.util.StringTokenizer; 

public class FortuneCookie { 
    private String subjList; 
    private String objList; 
    private String verbList; 
    private int sWords = 0; 
    private int oWords = 0; 
    private int vWords = 0; 
    private Random random = new Random(); 

    public FortuneCookie() { 
     subjList = "i#You#He#She#It#They"; 
     objList = "me#you#him#her#it#them"; 
     verbList = "hate#love#deny#find#hear#forgive#hurt#win#teach"; 
    } 

    public void setSubject(String subj) { 
     subjList = subj; 
    } 

    public void setObjectList(String obj) { 
     objList = obj; 
    } 

    public void setVerbList(String verb) { 
     verbList = verb; 
    } 

    public String genFortuneMsg() { 
     String v = " "; 
     String o = " "; 
     String s = " "; 
     StringTokenizer st1 = new StringTokenizer(subjList, "#"); 
     StringTokenizer st2 = new StringTokenizer(objList, "#"); 
     StringTokenizer st3 = new StringTokenizer(verbList, "#"); 

     while (st1.hasMoreTokens()) { 
      s = st1.nextToken(); 
      sWords = st1.countTokens(); 
      int no = random.nextInt(sWords); 

      if (no == sWords) { 
       break; 
      } 

     } 

     while (st2.hasMoreTokens()) { 
      o = st2.nextToken(); 
      oWords = st2.countTokens(); 
      int no2 = random.nextInt(oWords); 
      if (no2 == oWords) { 
       break; 
      } 

     } 

     while (st3.hasMoreTokens()) { 
      v = st3.nextToken(); 
      vWords = st3.countTokens(); 
      int no3 = random.nextInt(vWords); 
      if (no3 == vWords) { 

       break; 
      } 

     } 

     String gen = s + " " + v + " " + o; 
     return gen; 
    } 

    public void print() { 
     System.out.println("Tokens"); 
     System.out.println("Subject List:" + subjList + " count = " + sWords); 
     System.out.println("verb List:" + verbList + " count = " + vWords); 
     System.out.println("object List:" + objList + " count = " + oWords); 
    } 
} 

例外:バインド は(java.util.Random.nextIntで正でなければなりません FortuneCookieTest.main(FortuneCookieTest.java:6)で FortuneCookie.genFortuneMsg(FortuneCookie.java:42)でRandom.java:388)例外:バウンドが正でなければなりませんスレッド「メイン」java.lang.IllegalArgumentExceptionがで

+0

コードをデバッグしてください。 '' countTokens() ''へのあなたの呼び出しの1つは、負の数を返します。 – f1sh

+0

@ f1sh:好奇心のために、私は 'countTokens()'を見ていましたが、負の数値を返すとは思いません。最悪の場合は0を返します。 – NewUser

+0

thx男、私はそれを試してみる –

答えて

1

あなたの場合は、それがzeroで負ではありません。 whileループでcountToken方法

/** 
    * Calculates the number of times that this tokenizer's 
    * <code>nextToken</code> method can be called before it generates an 
    * exception. The current position is not advanced. 
    * 

のドキュメントから

あなたの回数トークンリターンゼロは、あなたが例外に遭遇します。そのエラーメッセージは、負またはゼロに再フォーマットする必要があります。

結果に1を加えたり、ゼロをチェックします。うまくいくはずです。

関連する問題