2 qq 28512757 qq_28512757 于 2015.06.15 22:57 提问

求大神帮我看看这段代码,打印完“12345”结束for循环后为什么还能继续运行?新手没金币,抱歉!

public class Test {

public static void main(String[] args) {
    prints(0, 0, 0, 0, 0);
}

public static void prints(int k1,int k2,int k3,int k4,int k5){

    if(k5!=0){      
        System.out.println(k1*10000+k2*1000+k3*100+k4*10+k5);
    }

    for(int i=1;i<=5;i++){

        if(k1==0) prints(i,k2,k3,k4,k5);

        else if(k2==0){ 
            if(i==k1) continue;
            else prints(k1,i,k3,k4,k5);
        }

        else if(k3==0){     
            if(i==k2||i==k1) continue;
            else prints(k1,k2,i,k4,k5);
        }

        else if(k4==0){
            if(i==k3||i==k2||i==k1) continue;
            else prints(k1,k2,k3,i,k5);
        }

        else if(k5==0){
            if(i==k4||i==k3||i==k2||i==k1) continue;
            else prints(k1,k2,k3,k4,i);
        }   
    }
}

}

9个回答

ycg514230
ycg514230   Rxr 2015.06.15 23:14

没有贴打印结果,猜测是你这个是不是递归没有控制好,陷入死循环了?

danielinbiti
danielinbiti   Ds   Rxr 2015.06.15 23:27

因为你这是for循环+递归,每个k值都会从1到5循环遍历一遍。如果要递归方式只输出12345
那每个prints后面加上break。比如

 if(k1==0) {
                prints(i,k2,k3,k4,k5);
                break;//只循环一次,跳出。
            }else if(k2==0){ 
                if(i==k1) continue;
                else {
                    prints(k1,i,k3,k4,k5);
                    break;
                }
            }
caozhy
caozhy   Ds   Rxr 2015.06.15 23:30

你想输出什么,是
00000
00001
00002
....
12345
么?

frank_20080215
frank_20080215   2015.06.16 05:31

因为用了continue,循环仍旧运行。改用break试试

tongyi55555
tongyi55555   2015.06.16 07:43

第一次进入for循环后就能输出12345,输出完毕后继续循环

tongyi55555
tongyi55555 回复qq_28512757: 不是啊,你的k1-k5的值在第一次循环的时候没有改变这些值啊。
大约 3 年之前 回复
qq_28512757
qq_28512757 输出完后,K1,K2,K3,K4,K5全都不为0,不满足for循环里面的条件了
大约 3 年之前 回复
lzp_lrp
lzp_lrp   Ds   Rxr 2015.06.16 08:22

没看出你这段代码的意图,递归写的有点乱,最好的办法就是单步执行一下,看是不是你想要的

beacon_2011
beacon_2011   Rxr 2015.06.16 14:06

你在prints()里边一直调prints(),当然死循环啦

qq_28512757
qq_28512757 这代码不是死循环,可以把12345的120种排列组合全打印出来。我就是看不懂,打印完12345之后,K1,K2,K3,K4,K5的值全部不为0 了。for里面的条件全都不满足了,程序就会停止运行了啊,
大约 3 年之前 回复
star890124
star890124   2015.06.16 16:07

这是一直递归啊,没有判断何时停止,肯定一直递归一直递归一直。。。

dominating413421391
dominating413421391   2015.06.17 13:34

并不是从0枚举到12345,而是每一位从1枚举到5,从而实现全排列。
可以理解为每次只改变当前为0的那一位,并使五个数字不相同。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
中断为什么能结束线程
一个常用但但并不一定能中断线程方法(因为如果此线程阻塞,则前面的判断可能会永远执行不到) package seven; import java.math.BigInteger; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import common.U
主程序运行完了,但是不想他退出,有子线程要继续运行
网上摘抄的,这是给自己看的blog 主程序运行完了,但是不想他退出,有子线程要继续运行 1. while(1) 循环,但是会占用cpu资源 http://blog.sina.com.cn/s/blog_74a459380102uwcb.html 一、一个进程如果是死循环,那么占有的CPU会很高,可以操作系统时间片运行的,到了一定时间不是会自动切换到别的进程吗?既然即便是死
多线程情况下,主线程先退出,子线程会被强制退出吗
1、进程中线程之间的关系 线程不像进程,一个进程中的线程之间是没有父子之分的,都是平级关系。即线程都是一样的, 退出了一个不会影响另外一个。 但是所谓的"主线程"main,其入口代码是类似这样的方式调用main的:exit(main(...))。 main执行完之后, 会调用exit()。 exit() 会让整个进程over终止,那所有线程自然都会退出。 2、主线程先退出,子线程
请大神帮我看看这段代码
#include #include DWORD WINAPI FunThread(LPVOID lpPra); DWORD WINAPI FunThread2(LPVOID lpPra); int iIndex = 0; int tickets = 100; HANDLE hMutex;//互斥对象句柄 void main() { HANDLE hTh
java main 线程既然被interrupt中断 为什么还会运行后面的
以下转自百度知道: 这是代码: public class InterruptCheck { public static void main(String[] args) { Thread t=Thread.currentThread(); System.out.println("A: isInterrupted="+t.isInterrupted()); t.interrupt();
程序退出main()函数之后,还有可能执行代码吗?
一、main()函数 【1】main()函数概念: main()函数称为主函数,一个程序中有且只有一个,拥有程序的执行权,程序在执行时总是先找到主函数,然后从它开始执行,当它调用某个子函数时,便将执行权交给被调用函数,被调用函数执行完毕后,再将执行权还给主调函数,主函数继续执行,一旦主函数结束,代表整个程序就结束了,那么,程序退出main()函数之后,还有可能执行代码吗?答案是肯定的 【2...
线程执行完,死亡后,还能再次执行start吗?
不能代码测试:@Test public void testStart() throws InterruptedException{ Thread add1 = new Thread(()->System.out.println("线程运行中")); add1.start(); add1.join(); add1.start();
大神帮我看看这段代码为什么运行不了,谢谢了
代码如下: #include int main(void) { int feet,fathoms; fathoms=2; feet=6*fathoms; printf("There are %d feet in %d fathoms!\n",feet,fathoms); printf("yes,I said %d feet!\n", 6*fathoms);
讨论main函数执行结束后还能在执行一段代码吗?
今晚突然脑中出现了这个问题,于是通过查找一些资料来进行一下解答。 要实现这个功能就需要使用atexit()函数,乍一看似乎是和exit()函数有关系,所以我们就先来复习一下exit()函数。 exit(): 通常是用在子程序中用来终结程序用的,使用后程序自动结束,跳回操作系统。main函数结束时也会隐式地调用exit()函数。 原型:void exit(int state); sta
Java让线程执行完后再return的方法
final CountDownLatch latch = new CountDownLatch(1); //同步执行, DataUtils.stringConvertClass(lastVersionInfo, VersionInfo.class, new BaseAbstractListener() { @Override publi