2016-07-31 57 views
0

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

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

回答

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

的覆盖注解的使用,因为你是压倒一切的,因为每个类(磨边根)正在实施的接口的这个方法。

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


为了避免错误,同时关闭扫描对象试试这个:

  • 创建一个类,让说的MyStatics类。
  • 构造函数是不需要的。通过这个例子

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

  • 呼叫从任何你想要的类扫描对象:添加为一个对象

    String input = MyStatics.scan.nextLine();

  • 在的excecution年底关闭扫描仪对象该程序。

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