java 从数组中随机抽取两个不相同的字符组合
现有数组String[]str=newString[]{"b","p","m","f","d","t","n","l"};现在要遍历整个数组,从中随机取3个字符,组合成一...
现有数组
String[] str = new String[]{"b","p","m","f","d","t","n","l"};
现在要遍历整个数组,从中随机取3个字符,组合成一个新的字符串。
要把所有可以组合的都列出来,并且不能取到重复的,请问怎么写?
不好意思没说明白,是组合结果不能有重复的,谢谢~ 展开
String[] str = new String[]{"b","p","m","f","d","t","n","l"};
现在要遍历整个数组,从中随机取3个字符,组合成一个新的字符串。
要把所有可以组合的都列出来,并且不能取到重复的,请问怎么写?
不好意思没说明白,是组合结果不能有重复的,谢谢~ 展开
3个回答
展开全部
要随机去的话还是有点复杂。我给你做出来了。
你这个数据太多了。有40320种情况。你可以把数据元素弄少点,试试。
package a;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class MakeString {
//随机变量
private static Random random=new Random();
//Set不重复的保存取到的结果
private static Set<String> list=new HashSet<String>();
//待处理数组
private static String[] str = new String[]{"b","p","m","f","d","t","n","l"};
//计算排列总数
public static int getNumber(int len){
if(len==1){
return 1;
}else{
return len*getNumber(len-1);
}
}
//随机取三个字符组合在一起
public static String getChar(String [] str){
String result="";
result+=str[random.nextInt(str.length)];
result+=str[random.nextInt(str.length)];
result+=str[random.nextInt(str.length)];
return result;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//计算总数
int count=getNumber(str.length);
//如果set里面数据不等于Count,继续计算
while(true){
list.add(getChar(str));
if(list.size()==count)
break;
}
//算完了,输出
for (String s : list) {
System.out.println(s);
}
}
}
展开全部
import java.util.ArrayList;
public class Traversal {
public static void main(String[] args) {
String[] str = new String[]{"b","p","m","f","d","t","n","l"};
ArrayList<String> allResult = new ArrayList<String>();
for(String s:str){
for(String p:str){
if(p.equals(s)){
continue;
}
for(String q:str){
if(q.equals(s)||q.equals(p)){
continue;
}
allResult.add(s+p+q);
}
}
}
System.out.println(allResult);
}
}
随机应该不是上面那个的意思吧,首先这是个遍历问题,如果真随机取还要什么全部组合,而且计算总数那个方法是取全部字符一次的数量不是3个的数量。不加流程判断让set自己去筛,就是运行时不可估计的复杂次,程序逻辑简单解法已经复杂度很高了,就不要弄不可控的了
public class Traversal {
public static void main(String[] args) {
String[] str = new String[]{"b","p","m","f","d","t","n","l"};
ArrayList<String> allResult = new ArrayList<String>();
for(String s:str){
for(String p:str){
if(p.equals(s)){
continue;
}
for(String q:str){
if(q.equals(s)||q.equals(p)){
continue;
}
allResult.add(s+p+q);
}
}
}
System.out.println(allResult);
}
}
随机应该不是上面那个的意思吧,首先这是个遍历问题,如果真随机取还要什么全部组合,而且计算总数那个方法是取全部字符一次的数量不是3个的数量。不加流程判断让set自己去筛,就是运行时不可估计的复杂次,程序逻辑简单解法已经复杂度很高了,就不要弄不可控的了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是要取到的数不能重复,还是组合结果不能重复!
追问
不好意思没说明白,是组合结果不能有重复的,谢谢~
追答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询