2014-11-14 74 views
0

我在Java中创建这种方法来获得一个随机字符串:java的随机字符串排除

public String getRandomStringWithExclusion(int array_id, String... exclude) { 

    String[] myResArray = getResources().getStringArray(array_id); 
    int idx = new Random().nextInt(myResArray.length); 
    String random = (myResArray[idx]); 

    for (String ex : exclude) { 
     if (random.contains(ex)) { 
      Toast.makeText(getBaseContext(), "fail", Utils.duration).show(); 
      break; 
     } 

    } 

    return random; 
} 

但是当我打电话:
getRandomStringWithExclusion(R.array.test, “测试”);它返回排除的值。 你怎么解决?

我不是java的专家。我是初学者。谢谢

+0

嗨,你的意思是随机=“测试”结束?这是不是有意义,因为你不随意修改任何地方,所以如果它首先被设置为排除值,那么它将保持原样? – xcoder 2014-11-14 13:47:49

+0

我假设你想从'myResArray'中返回一个随机值,但不能包含在'exclude'的数组中吗? – gtgaxiola 2014-11-14 13:50:18

+0

很难通过示例代码告诉您想要实现什么。一件确定的事情是,尽管包含检查,“随机”值仍然不受该方法影响。 – topr 2014-11-14 13:52:23

回答

0

这里是一个办法做到这一点,但肯定不是最优化:

要点是,如果你的random字符串包含withing exclude,那么你可以选择其他random并重新启动检查。

public String getRandomStringWithExclusion(int array_id, String... exclude) { 
    String[] myResArray = getResources().getStringArray(array_id); 
    int idx = new Random().nextInt(myResArray.length); 
    String random = (myResArray[idx]); 
    boolean keepGoing = true; 
    while (keepGoing) { 
     //Making keepGoing be false (terminating condition), 
     //And only making true if the random word fails because it has to be excluded 
     keepGoing = false; 
     for (String ex : exclude) { 
      if (random.contains(ex)) { 
       Toast.makeText(getBaseContext(), "fail", Utils.duration).show(); 
       keepGoing = true; 
       //looking for another random word 
       idx = new Random().nextInt(myResArray.length); 
       random = (myResArray[idx]); 
       break; 
      } 
     } 
    } 
    return random; 
} 
-1

你仍然有你的敬酒信息,是吗? 所以你的代码工作正常。

如果你发现它,你没有对返回的行为做出反应(意思是:不管你发现什么,你都会重试它)。 而不是休息使用:

return ""; 

这将停止搜索更多的限制,并没有为返回结果的方法。

问候。

+0

我需要一个值。不是“”结果 – user3744384 2014-11-14 14:05:31

+0

对不起,没有采取那一点, 只是试图在这一点上使用递归。 'return getRandomStringWithExclusion(array_id,exclude)'应该工作正常,而不是'return'“' – silentCode 2014-11-14 14:55:18