2016-07-31 5 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); 
    } 
} 

Процентовка аннотаций используется потому, что вы перекрывая этот метод из-интерфейса для каждого класса (ФОРМАТНО и Root) реализует.

Кроме того, предложение try, которое я добавил, это то, что вы узнаете позже (вы все еще младший, но это важно знать) и связано с обработкой исключений и ошибок.


Чтобы избежать ошибок при закрытии объекта Scanner попробуйте следующее:

  • Создать класс, позволяет сказать, что класс MyStatics.
  • Конструктор не требуется. Добавить это как объект:

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

  • Вызвать объект сканирования из любого класса, который вы хотите, используя этот пример:

    String input = MyStatics.scan.nextLine();

  • Закройте объект сканера в конце excecution из программа.

Я надеюсь, что это решит все проблемы, с которыми вы сталкиваетесь в своем коде.

Смежные вопросы