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

我正在编写一个简单的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.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();
}