如何关闭在方法 JAVA 中打开的扫描仪

How to close Scanner opened in a method JAVA

几天前我开始学习JAVA,所以我的问题可能太基础了。

我创建了一段代码如下:

import java.util.Scanner;

public class Que01 {

    public static void main(String[] args) {

        int principle=acceptInt("Principle");
        int roi=acceptInt("Rate Of Interest");
        int years=acceptInt("Years");
        float si=simpleInterest(principle,roi,years);

        System.out.println("Simple Interest for given details is : "+si);
    }

    static int acceptInt(String s1)
    {   System.out.println("Please Enter value for "+s1+" :");
        Scanner sc = new Scanner(System.in);
        int i= sc.nextInt();
        return i;
    }
    static float simpleInterest(int p,int r, int yr)
    {
        return p*yr*r/100;
    }

}

我想知道应该写在哪里:

sc.close();

另外:

Any other suggestion to code for improvement are Welcome!

import java.util.Scanner;

public class Que01 {

    Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {

        int principle = acceptInt("Principle");
        int roi = acceptInt("Rate Of Interest");
        int years = acceptInt("Years");
        float si = (p * yr * r/100);

        System.out.println("Simple Interest for given details is : " + si);
    }

    static int acceptInt(String s1) {   
        System.out.println("Please Enter value for " + s1 + " :");

        int i = sc.nextInt();

        sc.close();

        return i;
    }
}

这就是我想说的,但我不是专家。 sc.close 只保存您使用扫描仪所做的任何事情,例如。写入文件并保存文件。 - 因此在这种情况下我什至不会使用它。我也不会使用 calc si 的方法,除非你打算在其他地方使用它,因为它只是占用更多 space

导入java.util.Scanner;

public class Que01 {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int principle = acceptInt("Principle", false, sc);
    int roi = acceptInt("Rate Of Interest", false, sc)
    int years = acceptInt("Years", true, sc);
    float si = simpleInterest(principle, roi, years);

    System.out.println("Simple Interest for given details is : " + si);
}


static int acceptInt(String s1, boolean closeScanner, Scanner sc) {
    System.out.println("Please Enter value for " + s1 + " :");

    int i = sc.nextInt();
    if (closeScanner)
        sc.close();
    return i;
}
static float simpleInterest(int p, int r, int yr) {
    return p * yr * r / 100;
}

}

我不确定将布尔值作为参数传递来决定关闭扫描器是否是一个好习惯

您不应该关闭扫描仪,不用担心它会在计算 simpleInterest 后终止。当您 运行 程序并输入所需值后,它将计算并 return 结果并退出。 在您的代码 1 中,改进是您不应该一次又一次地创建 Scanner 对象,在整个生命周期中应该只有 1 个 Scanner 对象。

以下是您更新后的代码 -

public class Que01 {
private static Scanner sc = null;
public static void main(String[] args) {
    sc = new Scanner(System.in);
    int principle=acceptInt("Principle");
    int roi=acceptInt("Rate Of Interest");
    int years=acceptInt("Years");
    float si=simpleInterest(principle,roi,years);

    System.out.println("Simple Interest for given details is : "+si);
}

static int acceptInt(String s1)
{   System.out.println("Please Enter value for "+s1+" :");

    int i= sc.nextInt();
    return i;
}
static float simpleInterest(int p,int r, int yr)
{
    return p*yr*r/100;
}

}

在程序启动时创建 Scanner 并一次又一次地使用它。就是这样

希望这对您有所帮助。

多亏了 Vince,我才能够创建一个很好的代码版本。 这就是我需要的答案。


public class Que01 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int principle=acceptInt(sc,"Principle");
        int roi=acceptInt(sc,"Rate Of Interest");
        int years=acceptInt(sc,"Years");
        sc.close();
        float si=simpleInterest(principle,roi,years);

        System.out.println("Simple Interest for given details is : "+si);
    }

    static int acceptInt(Scanner sc,String s1)
    {   System.out.println("Please Enter value for "+s1+" :");

        int i= sc.nextInt();
        return i;
    }
    static float simpleInterest(int p,int r, int yr)
    {
        return p*yr*r/100;
    }

}```