2017-02-23 61 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.lang.IllegalArgumentException异常:结合 必须在java.util.Random.nextInt是正的( Random.java:388)维持在 FortuneCookieTest.main(FortuneCookieTest.java:6 FortuneCookie.genFortuneMsg(FortuneCookie.java:42))异常在线程“主” java.lang.IllegalArgumentException异常:结合必须为正

+0

请调试您的代码。其中一个调用countTokens()会返回一个负数。 – f1sh

+0

@ f1sh:出于好奇,我在看'countTokens()',我不认为它可以返回一个负数。最差的情况下会返回0. – NewUser

+0

thx男子,我会尝试它 –

回答

1

你的情况不为负是zero

从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. 
    * 

在while循环的文档时,你的计令牌归零,你碰到一个例外。那么错误信息应该重新格式化为负值或零。

将1添加到您的结果或检查零。应该管用。

相关问题