线程" main"中的例外情况java.lang.IllegalArgumentException:bound必须为正数

时间:2017-02-23 12:41:19

标签: java

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

线程中的异常" main" java.lang.IllegalArgumentException:bound   在java.util.Random.nextInt(Random.java:388)at必须是正面的   FortuneCookie.genFortuneMsg(FortuneCookie.java:42)at   FortuneCookieTest.main(FortuneCookieTest.java:6)

1 个答案:

答案 0 :(得分: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或检查零。应该工作。