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