0
import java.util.Scanner;

class Operation {
double add(double a, double b){
    double c;
    c = a+b;
    return c;
}
double sub(double a, double b){
    double c;
    c = a-b;
    return c;
}
double mul(double a, double b){
    double c;
    c = a*b;
    return c;
}
double div(double a, double b){
    double c;
    c = a/b;
    return c;
}
}

class Selection{    
static double x,y;
void func(int a){
    Scanner sc = new Scanner(System.in);
    char b;
    if(a==1)
        b='+';
    else if(a==2)
        b='-';
    else if(a==3)
        b='*';
    else
        b='/';
    System.out.println(">>You have selected "+b+" operator");
    System.out.println(">>Please enter the first operand.");
    x = sc.nextDouble();
    System.out.println(">>Please enter the second operand.");
    y = sc.nextDouble();
 sc.close(); //line 44, this statement gave me a problem.
    }   
}


public class Calculator {
static int select;

@SuppressWarnings("static-access")
public static void main(String [] args){
    Operation op = new Operation();
    Selection sel = new Selection();
    Scanner sc = new Scanner(System.in);
    boolean run = true;


    while(run){
        System.out.printf(">>Select Operator\n>>1: +  2: -  3: *  4: /\n");
        select = sc.nextInt();
        double a = sel.x;
        double b = sel.y;
        double result;

        switch(select){
        case 1:
            sel.func(1);
            a = sel.x;
            b = sel.y;
            result = op.add(a, b);
            System.out.println(">>The result of "+a+" + "+b+" is "+result);
            break;              
        case 2:
            sel.func(2);
            a = sel.x;
            b = sel.y;
            result = op.sub(a,b);
            System.out.println(">>The result of "+a+" - "+b+" is "+result);
            break;              
        case 3:
            sel.func(3);
            a = sel.x;
            b = sel.y;
            result = op.mul(a,b);
            System.out.println(">>The result of "+a+" * "+b+" is "+result);
            break;      
        case 4: 
            sel.func(4);
            a = sel.x;
            b = sel.y;
            result = op.div(a,b);
            System.out.println(">>The result of "+a+" / "+b+" is "+result);
            break;  
        default:
            System.out.println(">>Your number is not available, please try again!");
            System.out.println();
            System.out.println();
            continue;
        }       

        System.out.println(">>Do you want to exit the program(y)?");
        String startOver = sc.next();


        if(startOver.equals("y")){
            run = false;
            System.out.println(">>Thank you for using my program!");
        }else{
            System.out.println();
            continue;
        }
sc.close();   //line 111, this works fine i think.
    }
}

}

私は Java プログラミングの初心者で、これは宿題用の単純な「電卓」コードです。私は自分のコードをシンプルでありながら効果的なものにしたいと考え、それに一生懸命取り組みました。コードを確認した後、「リソース リーク: 'sc' は決して閉じられません」という警告メッセージが表示されました。「sc.close();」を追加しなくても問題なく動作することはわかっていましたが、プログラムを完璧にしたいと考え、「sc.close();」を追加しました。ステートメントを 44 行目と 111 行目に追加します。ステートメントを追加した後、リソース リークに関する警告は消えましたが、コードを実行すると、プログラムが別の計算を要求するときがあり、すぐにデバッグ コンソールがポップアップします。

デバッグ コンソールが表示される理由がわかりません。何が問題だと思いますか?

4

1 に答える 1