Как закрыть Сканер, открытый в методе JAVA - PullRequest
0 голосов
/ 14 февраля 2020

Я начал изучать JAVA пару дней go, поэтому мой вопрос может быть слишком базовым c.

Я создал фрагмент кода, который выглядит следующим образом:

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;
    }

}

Я хочу знать, куда мне написать:

s c .close ();

Также:

Приветствуются любые другие предложения по улучшению кода.

Ответы [ 4 ]

0 голосов
/ 14 февраля 2020

Благодаря Винсу я смог создать хорошую версию своего кода. и это тот ответ, который мне нужен.


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;
    }

}```
0 голосов
/ 14 февраля 2020

import java .util.Scanner;

publi c 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;
}

}

Я не уверен, что это хорошо практика передачи логического значения в качестве параметра для решения закрыть сканер

0 голосов
/ 14 февраля 2020

Не следует закрывать сканер, не беспокойтесь о том, что он прекратит работу после расчета simpleInterest. Когда вы запустите программу и после ввода необходимых значений она рассчитает и вернет результат и выйдет. В вашем коде 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 при запуске программы и используйте ее снова и снова. Вот и все

надеюсь, это поможет вам.

0 голосов
/ 14 февраля 2020
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, если вы не планируете использовать его в другом месте, так как он просто занимает больше места

...