2017-02-23 9 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); 
    } 
} 

Exception in thread "main" java.lang.IllegalArgumentException positiv sein muss: gebunden muss java.util.Random.nextInt positiv (Random.java:388) bei FortuneCookie.genFortuneMsg (FortuneCookie.java:42) bei FortuneCookieTest.main (FortuneCookieTest.java:6)Exception in thread "main" java.lang.IllegalArgumentException: gebundene

+0

Debuggen Sie Ihren Code bitte. Einer Ihrer Aufrufe von '' countTokens() '' gibt eine negative Zahl zurück. – f1sh

+0

@ f1sh: Aus Neugierde habe ich mir die 'countTokens()' angesehen und ich glaube nicht, dass sie eine negative Zahl zurückgeben kann. Worst Case würde 0 zurückgeben. – NewUser

+0

thx Mann, ich werde es versuchen –

Antwort

1

Ihr Fall ist nicht negativ es zero ist.

Aus der Dokumentation von countToken Methode

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

In einer while-Schleife, wenn Ihre Zählung Token Rückkehr Null, Sie in eine Ausnahme laufen. Nun, diese Fehlermeldung sollte zu negativ oder null umformatiert werden.

Fügen Sie 1 zu Ihrem Ergebnis hinzu oder suchen Sie nach Null. Sollte arbeiten.

Verwandte Themen