【问题标题】:Using scanner in multiple classes在多个类中使用扫描仪
【发布时间】:2016-07-31 16:35:04
【问题描述】:

我刚开始学习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);
    }
}

【问题讨论】:

  • 您粘贴的代码没有显示任何警告/错误。它工作得很好。你还想要什么?

标签: java


【解决方案1】:

我的 IDE (Netbeans) 显示的警告弹出窗口是针对 Override 注释和您实例化的 Scanner 对象的。 如果您想消除警告,您的代码可能如下所示:

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

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

此外,我添加的 try 子句是您稍后将学习的内容(您仍然是初级人员,但了解这一点很基本)并且与异常/错误处理有关。


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

  • 创建一个类,比如说 MyStatics 类。

  • 不需要构造函数。将此添加为对象:

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

  • 使用此示例从您想要的任何类中调用扫描对象:

    String input = MyStatics.scan.nextLine();

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-20
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    相关资源
    最近更新 更多