为什么这段代码没有结束?

时间:2013-10-15 13:15:52

标签: java loops

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 sel(int a){
    Operation op = new Operation();
    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();
    }
double x(){
    return x;
}
double y(){
    return y;
}
}


public class Calculator {
static int select;

public static void main(String [] args){
    Operation op = new Operation();
    Selection se = 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();

        if(select == 1){
            se.sel(1);
            double a = se.x();
            double b = se.y();
            double result = op.add(a, b);
            System.out.println(">>The result of "+a+" + "+b+" is "+result);

        }else if (select ==2){
            se.sel(2);
            double a = se.x();
            double b = se.y();
            double result = op.sub(a,b);
            System.out.println(">>The result of "+a+" - "+b+" is "+result);

        }else if (select ==3){
            se.sel(3);
            double a = se.x();
            double b = se.y();
            double result = op.mul(a,b);
            System.out.println(">>The result of "+a+" * "+b+" is "+result);

        }else if(select == 4){
            se.sel(4);
            double a = se.x();
            double b = se.y();
            double result = op.div(a,b);
            System.out.println(">>The result of "+a+" / "+b+" is "+result);

        }else {
            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/n)?");
        String startOver = sc.nextLine();

        if(startOver.equals("y")){
            run = false;
            System.out.println(">>Thank you for using my program!");
        }else{
            continue;
        }
    }
}

}

所以这是我高中作业的计算程序。它工作正常,要求退出程序或继续代码。即使我想退出程序,它也会在显示结果后重新启动。我认为在代码结束时出现了问题。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

问题在于:

String startOver = sc.nextLine();

当您使用nextDouble()读取操作数时,该方法会在解析器/缓冲区中留下其余部分。

因此,当您致电nextLine()时,您仍在阅读上一行的其余部分。 这会导致您的startOver字符串为空,if条件也不起作用。

我建议您使用scan.next()代替scan.nextLine()