我有一个字符串
String a="100,200,1000";
现在想实现一下这段代码
for(int i=0;i<100;i++){
for(int i=0;i<200;i++){
for(int i=0;i<1000;i++){ }
}
}
可是,我的a中的字符串的长度和位数都不一定,或许是String a="100,200,1000,9";
求一段简洁程序,实现上边逻辑
String a="100,200,1000";
现在想实现一下这段代码
for(int i=0;i<100;i++){
for(int i=0;i<200;i++){
for(int i=0;i<1000;i++){ }
}
}
可是,我的a中的字符串的长度和位数都不一定,或许是String a="100,200,1000,9";
求一段简洁程序,实现上边逻辑
解决方案 »
- 明知道编译过不了还是查不出来...
- 要去深圳工作了...散点分...伤心..
- 关于java第三方包
- 如何设置showConfirmDialog弹出对话框的默认焦点按钮?
- 谁有java深度历险书的电子版,发给我一份!!!
- 如何实现多个时区的时间显示
- 我的困惑__路在何方_迷茫 (请看破红尘的高手指点)
- 两大论坛人气大比拼:JAVA vs VB
- 如何让一个JTextField如果录入错误的数据就不能转移焦点?
- 哪里有thinking in java中的流程下载?
- 用JAVA循环添加大量数据到Sql Server时出现“Error establishing socket”
- 请问在java中怎么创建pl/sql触发器啊,用Statement对象的execute语句不能换行啊
return cha[n];思路是这样的
for(int i=0;i<list.get(0);i++){
//dosomething
list.remove(0);
if(list.size()>0){
doFor(list);
}
}
}
String a="100,200,1000";
现在想实现一下这段代码
for(int i=0;i <100;i++){
for(int j=0;j <200;j++){
for(int k=0;k <1000;k++){
if(i*j*k==100){//主要是用循环找到符合条件的i,j,k}
}
}
}
可是,我的a中的字符串的长度和位数都不一定,或许是String a="100,200,1000,9";
求一段简洁程序,实现上边逻辑
String[] cha = a.split(a,",");
int n = cha.length;
int index=n;
while(index != 0){
for(int i =0; i <cha[index]; i++)
{//TODO}
}笨方法的流程
for(int i=0;i<list.get(0);i++){
//dosomething
list.remove(0);
if(list.size()>0){
doFor(list);
}
}
}这个代码已经实现了你要求的递归循环,然后就是一个判断过程,你这个题目只是一个简单的递归算法,主要就是写一个递归函数
提供的StringUtils中的split方法进行字符分割
然后将每个字符串转换成int然后进行循环
至于根据能转换成几个int型,有几次循环
就不得而知了 ,学习ing
class StrangeNumber{
int[] max;
int[] current;
public void increase(){
}
public boolean satisfied(){
}
}其中,max记录由a拆开后的数字,也就是说每位允许的最大数字
current记录当前数字,初始全部为0。
increase负责将current的最末位增1,各位进位规则是达到对应max中的值。
satisfied方法判断current中的各位数字是否符合要求。
String a="100,200,1000";
然后用split把a分割了
现在想实现一下这段代码
for(int i=0;i <100;i++){
for(int j=0;j <200;j++){
for(int k=0;k <1000;k++){
//最重要的,我是想实现这里的逻辑,我想把所有符合条件的ijk都找出来
}
}
}
package com.capinfo.test;public class StringTest {
public static void main(String[] args) {
String s="100,200,1000,9,2000";
digui(s);
}
/**
* @param s
* @author sundful
* @vesion 1.0
*/
public static void digui(String s)
{
String s1="";
String s2="";
if("".equals(s) || s.trim().length()<0) return;
int num=s.indexOf(",");
if(num !=-1)
{
s1=s.substring(0,num);
s2=s.substring(num+1);
for(int i=0;i<Integer.parseInt(s1);i++)
{
digui(s2);
System.out.println(i);
}
}
}
}
public class MTest { private static int count = 1;
public static void main (String [] args) {
String a = "1,7,3,4";
String[] lens = a.split("[,]");
doLoop(lens, 0);
} public static void doLoop(String [] lens, int index) {
if (index != lens.length) {
int range = Integer.parseInt(lens[index]);
for (int i = 0; i < range; i++) {
doLoop(lens, index + 1);
}
} else {
System.out.println("doLoop" + String.valueOf(count));
count++;
}
}
}
// TODO Auto-generated method stub
int[] a = {1,1,2,3};
execute(a,0);
}
public static void execute(int[] a,int index){
if (index >= a.length)
return;
for (int i = 0; i < a[index]; i++){
//some code here
execute(a,index + 1);
}
}
// TODO Auto-generated method stub
int[] a = {1,1,2,3};
execute(a,0);
}
public static void execute(int[] a,int index){
if (index >= a.length)
return;
for (int i = 0; i < a[index]; i++){
//some code here
execute(a,index + 1);
}
}
String[] arr = a.split(",");
int len = arr.length;
int[] loop = new int[arr.length];
int[] curr = new int[arr.length];
for(int i=0;i<loop.length;i++)
loop[i] = new Integer(arr[i]).intValue();
for(int i=0;curr[0]<loop[0];i++){ for(int j=0;j<loop.length;j++)
System.out.print(curr[j]+"\t");
System.out.println(); curr[len-1]++;
for(int j=len-1;j>0;j--){
if(curr[j]==loop[j]){
for(int k=j;k<len;k++)
curr[k]=0;
curr[j-1]++;
}
}
if(i>=loop[len-1]){
i=0;
}
}
i=0;
}
这块不要,忘去掉了.
List<Integer> LoopDo(List<Integer> intList,List<Integer> indexList) {
if (intList.size == 0) {
//伪代码
if indexList的所有元素的集合满足你的要求,输出你所有的元素。
return indexList;
}
for (int i=0; i<intList.get(0).intValue; i++) {
LoopDo(intList.subList(1,intList.size()),indexList.add(new Integer(i)));
}
}调用方法
main(){
List<Integer> intList = 你的string中分割得到的list
List<Integer> indexList = new ArrayList<Integer>();
LoopDo(intList,indexList);
}
int[] max;
int[] current;
public static void main(String[] args){
String a="100,200,1000";
StrangeNumber num=new StrangeNumber(a);
while(!num.reachMax()){
num.increase();
if (num.satisfied()){
//实现要做的事情
}
}
}
public StrangeNumber(String str){
String[] segs=str.split(",");
max=new int[str.length];
current=new int[str.length]
for(int i=0; i<segs.length;i++){
max[i]=Integer.parseInt(segs[i]);
current[i]=0;
}
}
public void increase(){
current[current.length-1]++;
for(int i=current.length-1;i--;i>=0){
if (current[i]>=max[i]){
current[i]=0;
current[i-1]++;//简单起见,先不处理下标越界
}
}
}
public boolean reachMax(){
//判断各位是否已经达到最大
}
public boolean satisfied(){
//计算current的当前各位数字是否符合要求
}
}
有点想法写出来不知道对不对,仅供参考。
……
String[] array = a.split(",");
int n = array.length;
int[] result = new int[n];
public void execute(int value)
{
int testValue;
if(n==array.length)//第一次执行给 value 赋值
value=1; n--;
for(int i=0;i<Integer.parseInt(array[n]);i++)
{
testValue=value*i;
result[n]=i;
if(n==0&&testValue==100)//找到了符合条件的一组数,存在数组 result 中
{
……//
return;
}
if(n>0)
{
execute(testValue);//递归
}
if(n<0) return;
}
}……
……
String[] array = a.split(",");
int n = array.length;
int[] result = new int[n];
public void execute(int value)
{
n--;
for(int i=0;i <Integer.parseInt(array[n]);i++)
{
result[n]=i;
if(n==0)//找到了一组数,存在数组 result 中
{
……//对组数进行判断,看是否符合条件。
return;
}
else if(n> 0)
{
execute();//递归
}
else if(n <0)
return;
}
}
……