在多个类中使用扫描仪

时间:2016-07-31 08:12:48

标签: java

我刚开始学习Java并编写了这段代码来练习创建界面。我意识到在这里使用接口关系可能不是它应该如何实际使用,但我这样做只是为了练习和基本的理解。

所以无论如何,我创建了程序来接受用户输入他们想要执行的操作,然后执行所述操作。为此,用户提供两个输入:首先是他们想要执行的操作,然后是他们希望执行的操作。因此,例如,如果他们想要找到4的平方根,他们首先输入2选择平方根,然后输入4表示他们想要找到4的平方根。所以为了这个目的,我打开扫描仪关于多个班级的课程。但是,关闭任何一个类中的扫描程序会产生错误,因为很明显,一旦将其关闭在文件中,就无法重新打开。我搜索了很多,大多数建议集中在说使用像这样的扫描仪的多个实例只会产生问题所以只创建一个。虽然我可以重写这段代码来进行调整,但我想知道是否有一种方法可以做我所做的事情,而不会像在这段代码中弹出任何警告信息那样:

import java.util.Scanner;

public class Operation 
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        System.out.println("1. Square");
        System.out.println("2. Square Root");
        System.out.print("Enter Number: ");
        int choice = in.nextInt();

        switch(choice)
        {
        case 1:
        Squaring s1 = new Squaring();
        s1.getDim();
        s1.operate();
        break;

        case 2:
        Root r1 = new Root();
        r1.getDim();
        r1.operate();
        }
    }
}

interface Method
{
    void getDim();
    void operate();
}

class Squaring implements Method
{
    double n, r;

    public void getDim()
    {
        Scanner in = new Scanner(System.in);
        System.out.print("Input Number: ");
        n = in.nextDouble();
    }

    public void operate()
    {
        r = n*n;
        System.out.println("Squared of " + n + " is = " + r);
    }
}

class Root implements Method
{
    double n, r;

    public void getDim()
    {
        Scanner in = new Scanner(System.in);
        System.out.print("Input Number: ");
        n = in.nextDouble();
        in.close();
    }

    public void operate()
    {
        r = Math.sqrt(n);
        System.out.println("Square root of " + n + " is = " + r);
    }
}

1 个答案:

答案 0 :(得分:1)

警告弹出我的IDE(Netbeans)节目用于覆盖注释和您实例化的扫描仪对象。 如果您想消除警告,您的代码可能如下所示:

class Squaring implements Method
{
     double n, r;

     @Override
     public void getDim()
     {
        try (Scanner in = new Scanner(System.in)) {
            System.out.print("Input Number: ");
            n = in.nextDouble();
        }
     }

     @Override
     public void operate()
     {
         r = n*n;
         System.out.println("Squared of " + n + " is = " + r);
     }
}

使用覆盖注释是因为您要覆盖此方法,因为每个类(Squaring和Root)正在实现接口。

我添加的try子句也是你稍后会学到的东西(你仍然是初级的,但知道这一点是基本的),并且与异常/错误处理有关。

为避免在关闭Scanner对象时出错,请尝试以下操作:

  • 创建一个类,比如MyStatics类。
  • 不需要构造函数。将其添加为对象:

    public static Scanner scan = new Scanner(System.in);

  • 使用此示例从所需的任何类中调用扫描对象:

    String input = MyStatics.scan.nextLine();

  • 在程序执行结束时关闭扫描仪对象。

我希望这能解决您在代码中遇到的所有问题。