解决如何通过for,while,递归算法用java 写 n!,结果遇到Resource leak:'XX’is never closed!!

Java新手在编写n!的递归算法时遇到了'Resource leak'警告,了解到未关闭Scanner对象可能导致该问题。在理解并解决这个问题后,又遇到了语法错误。通过调试,最终解决了这两个问题,并分享了解决方案和对递归算法的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

偶是一名Java菜鸟,

Resource leak:'XX’is never closed

在这里插入图片描述
然后我查看了几个博主的帖子,里面介绍了大概其原因以及解决方案:
原因是我申请了扫描机,也就是Scanner,创建一个Scanner类对象,让它接收从键盘输入的数据以后,使用结束后并没有关闭。好比打开电脑让它一直工作不关闭,虽然能运行,但是这种写法还是不是很规范。
有开机怎么能没有关机呢?
解决方案是在main函数后加上XXX(Scanner类对象名).close();即可(现在明白是扫描结束点)
然鹅不知道是哪里的问题,上一个问题解决了但是又出现了一个新的问题
T^T

XXX有语法错误,在此标记之后应为XXX

大佬请看这里
以下为有错的部分代码:


    	 q++;
     }
     System.out.print(n+"的阶乘的最终结果是"+s);
     System.out.print("\n第三种:用递归算法求:\n");
     System.out.print("递归方法:"+jiecheng(n));
}
scanner.close();
public static Long jiecheng(Long n){
       if(n==0)
          return 1L;
       else
          return n*jiecheng(n-1);
}
}

因为偶太菜,关闭scanner也不知道在哪里关,导致以上的问题。
在调试结束后加入XXX(扫描机类对象名).close();是没错的,看把代码放在哪里。
以下是我调试好的
在这里插入图片描述

这也是解决如何用Java如何使用for、while、递归来求出n!

package p1;
import java.util.Scanner;
public class For {
public static void main(String[] args) {
	System.out.print("第一种:用for循环解题:\n");
	Scanner scanner = new Scanner (System.in);
     System.out.print("请输入n的值:");
     long  n= scanner.nextInt();
     long i,z=1;
     for(i=1;i<=n;i++)
     {
    	 z *= i;
     }
     System.out.print("计算"+n+"的阶乘的结果="+z);
     System.out.print("\n第二种:用while循环解题:\n");
     long s=1,q=1;
     while(q<=n) {
    	 s *= q;
    	 q++;
     }
     System.out.print(n+"的阶乘的最终结果是"+s);
     scanner.close();
     System.out.print("\n第三种:用递归算法求:\n");
     System.out.print("递归方法:"+jiecheng(n));
}
public static Long jiecheng(Long n){
if(n==0)
return 1L;
else
return n*jiecheng(n-1);
}
}

在这里插入图片描述
虽然还是很菜,但是通过自己解决的错误也是很高兴的啊。
事实也证明,算法的确太太太重要了。递归直接或间接调用自身的一种方法,本身就可以自己扫描。如果调用其他扫描机的话可能就会……出问题。
嗯……是这样的吧。
ε=(´ο`*)))唉
当咸鱼太不容易了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ULock

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值