Java 调用函数会给出;“非接触性异常”;
我正在编写一个简单的Java程序来解释循环。我希望每个演示都有一个单独的函数。现在,每个函数都可以正常工作,但只有当另一个函数没有被调用时。如果我同时调用这两个函数,则在运行时会出现以下错误:Java 调用函数会给出;“非接触性异常”;,java,function,Java,Function,我正在编写一个简单的Java程序来解释循环。我希望每个演示都有一个单独的函数。现在,每个函数都可以正常工作,但只有当另一个函数没有被调用时。如果我同时调用这两个函数,则在运行时会出现以下错误: Please input a positive integer as the end value: 5 The summation is: 9 How many rows do you want your triangle to be?: Exception in thread "main" java.u
Please input a positive integer as the end value: 5
The summation is: 9
How many rows do you want your triangle to be?: Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at loops.exercise2(loops.java:48)
at loops.main(loops.java:11)
代码:
import java.util.Scanner;
公共类循环
{
公共静态void main(字符串参数[])
{
练习1();
System.out.println();
练习2();
}
公共静态无效练习1()
{
整数极限;
int i;
整数和;
扫描仪键盘=新扫描仪(System.in);
System.out.print(“请输入一个正整数作为结束值:”);
limit=keyboard.nextInt();
i=1;
总和=0;
而(i我猜是您的扫描仪类相互干扰。exercise1
从中的标准获取输入,然后在完成时关闭。然后exercise2
还尝试从中关闭的标准获取输入
我建议您只制作一个扫描仪,并将其作为参数传递给exercise1和exercise2,然后在两次调用后关闭它。我猜您的扫描仪类相互干扰。exercise1
从标准中获取输入,然后在完成后关闭。然后exercise2
也尝试从中获取输入关闭的标准
我建议您只制作一个扫描仪,并将其作为参数传递给练习1和练习2,然后在两次调用后关闭它。制作一个全局扫描仪,只启动一次,然后调用其方法。制作一个全局扫描仪,只启动一次,然后调用其方法。尝试不调用键盘。close()尽量不要调用keyboard.close();
这是因为当您关闭扫描仪时,它也会关闭输入流,在本例中是System.in。当您尝试在execise2方法中实例化扫描仪时,输入流会关闭
看到这个帖子
发生这种情况的原因是,当您关闭扫描仪时,它也会关闭输入流,在本例中为System.in。当您尝试在execise2方法中实例化扫描仪时,输入流会关闭
看到这个帖子
提示:下次,请使用较短的标题!=)这是因为两种方法都在等待扫描仪输入(这是您的控制台输入),并且似乎相互干涉提示:下次,请使用较短的标题!=)这是因为两种方法都在等待扫描仪输入(这是您的控制台输入)这解决了问题,但并没有产生新的问题:什么时候有人想关闭扫描仪?如果垃圾收集器确保没有内存泄漏,并且关闭扫描仪意味着你不能再使用系统。在其他情况下,什么时候关闭它是个好主意?你可以将扫描仪与其他设备一起使用系统之外的输入流的pes。在,和许多情况下,当您使用扫描仪时,需要关闭底层输入流。此链接中有一些示例…谢谢。这修复了问题,但不会产生新的问题:何时有人想要关闭扫描仪?如果垃圾收集器确保存在no内存泄漏,关闭扫描仪意味着您无法使用系统。在中,什么时候关闭它是一个好主意?您可以将扫描仪与系统之外的其他类型的输入流一起使用。在中,以及在许多情况下,在使用完扫描仪后关闭基础输入流是可取的。此链接中有一些示例。。。
import java.util.Scanner;
public class loops
{
public static void main( String args[] )
{
exercise1();
System.out.println();
exercise2();
}
public static void exercise1()
{
int limit;
int i;
int sum;
Scanner keyboard = new Scanner(System.in);
System.out.print ("Please input a positive integer as the end value: ");
limit = keyboard.nextInt();
i=1;
sum = 0;
while (i <= limit)
{
sum = sum + i;
i = i + 2;
}
System.out.print("The summation is: " + sum);
keyboard.close();
}
public static void exercise2()
{
int numRows, i, j;
Scanner keyboard = new Scanner(System.in);
System.out.print("How many rows do you want your triangle to be?: ");
numRows = keyboard.nextInt();
for(i=0; i<numRows; i++)
{
for(j=0; j<=i; j++)
{
System.out.print("*");
}
System.out.println();
}
keyboard.close();
}