2016-07-31 4 views
0

私はちょうどJavaを学び始め、このコードを書いてインターフェイスを作成する練習をしました。ここでのインターフェース関係の使用は、おそらく実際に使用される方法ではないが、私は練習と基本的な理解のためだけにこれをやっていたことに気がついた。複数のクラスでスキャナを使用する

とにかく、実行する操作をユーザーから入力して、その操作を実行するプログラムを作成しました。この目的のために、ユーザーは2つの入力を提供します。最初に実行したい操作と、実行したい番号です。たとえば、4の平方根を求めたい場合は、2を入力して平方根を選択し、次に4を入力して4の平方根を求めようとします。この目的のために、私はスキャナを開きました複数クラスのクラス。ただし、クラス内のいずれかでスキャナを閉じると、ファイル内で閉じた後に再オープンできないため、エラーが発生します。私は多くを検索し、ほとんどの提案は、このようなスキャナの複数のインスタンスを使用すると問題が生じるので、1つしか作成しないと主張しました。私はその調整をするために、このコードを書き換えることができますが、彼らは、このコードでポップアップ表示のように、私は警告メッセージを作成せずに、私がやっていること行うことができます方法があった場合、私は思っていた:

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)ショーは、インスタンス化するオーバーライドアノテーションとスキャナーオブジェクト用です。あなたは警告を解消したい場合は あなたのコードは次のようになります。あなたがあるため、各クラス(二乗しルート)が実装されるインタフェースのこのメソッドをオーバーライドしているため

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の最後にスキャナオブジェクトを閉じますプログラム。

あなたのコードで直面しているすべての問題を解決することを願っています。

関連する問題