简单计算器无法通过println

时间:2014-03-21 15:29:34

标签: java

所以这是我的代码。

https://ideone.com/ok42QZ

    System.out.println("setcaculatorinput");
    Scanner sc = new Scanner(System.in);
    int z = sc.nextInt();
    System.out.println("setvalueA");
    int a = sc.nextInt();
    System.out.println("setvalueB");

主要问题是我无法越过System.out.println(“setcaculatorinput”),因为它在该行之后崩溃。

5 个答案:

答案 0 :(得分:0)

问题在于尝试将输入+解析为代码第13行中的整数(以及stdin上的第一个输入)。您可以将来电从.nextInt()切换为.nextLine(),并将z的类型更改为String

public static void main (String[] args) throws java.lang.Exception
{
    System.out.println("setcaculatorinput");
    Scanner sc = new Scanner(System.in);
    //switch z out for a String instead of an int, and use .nextLine()
    String z = sc.nextLine();
    System.out.println("setvalueA");
    int a = sc.nextInt();
    System.out.println("setvalueB");
    int b = sc.nextInt();
    ...
}

答案 1 :(得分:0)

1)首发将第17行更改为String z = sc.next(); 你正在读取整数,传递字符,并进一步将其视为字符串

2)在你的每个if语句之后,你有;所以每个块之后都会被执行

答案 2 :(得分:0)

System.out.println("setcaculatorinput");
Scanner sc = new Scanner(System.in);
int z = Integer.parseInt(sc.nextLine());   
System.out.println("setvalueA");
int a = Integer.parseInt( sc.nextLine());
System.out.println("setvalueB");

基本上发生的事情是,当您正在读取sc.nextInt()的double时,您只读取int,但是当您在sc.nextInt未读取的流上按Enter键时会出现ENDLINE字符( )。

答案 3 :(得分:0)

让我格式化你的代码...... 第一:

if ("+".equals(z))
    ; // it's an empty condition!

{ // this is an init block
 System.out.println(c);
}

您的所有代码"格式化":

public static void main(String[] args) throws java.lang.Exception {
        System.out.println("setcaculatorinput");
        Scanner sc = new Scanner(System.in);
        int z = sc.nextInt();
        System.out.println("setvalueA");
        int a = sc.nextInt();
        System.out.println("setvalueB");
        int b = sc.nextInt();
        int c, d, e, f;

        c = (a + b);
        d = (a - b);
        e = (a * b);
        f = (a / b);

        if ("+".equals(z))
            ;
        if ("-".equals(z))
            ;
        if ("*".equals(z))
            ;
        if ("/".equals(z))
            ;

        { // init block
            System.out.println(c);
            System.out.println(d);
            System.out.println(e);
            System.out.println(f);
        }
        System.exit(0);
    }

显示错误是因为您尝试读取非整数字符,读取new Scanner("").nextInt();的Javadoc并且您将看到它抛出:" InputMismatchException - 如果下一个标记不匹配整数正则表达式,或超出范围"。

我给你一个简短的解决方案,但我不推荐它,因为没有对输入进行检查..

public static void main(String[] args) {
        System.out.println("setcaculatorinput");
        Scanner sc = new Scanner(System.in);
        int result = 0;

        System.out.println("setvalueA=");
        int a = sc.nextInt();

        System.out.println("setOperator=");
        String op = sc.next();

        System.out.println("setvalueB=");
        int b = sc.nextInt();

        if ("+".equals(op))
            result = a + b;
        else if ("-".equals(op))
            result = a - b;
        else if ("*".equals(op))
            result = a * b;
        else if ("/".equals(op))
            result = a / b;

        System.out.println("The result is=" + result);
        System.exit(0);
    }

答案 4 :(得分:0)

此代码可以使用:

import java.util.Scanner;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        System.out.println("setcaculatorinput");
        Scanner sc = new Scanner(System.in);
        String z = sc.next();
        System.out.println("setvalueA");
        int a = sc.nextInt();
        System.out.println("setvalueB");
        int b = sc.nextInt();
        int c;
        int d;
        int e;
        int f;
        c = ( a + b );
        d = ( a - b );
        e = ( a * b );
        f = ( a / b );
        if("+".equals(z))
        {
        System.out.println(c);
        }
        if("-".equals(z))
        {
        System.out.println(d);
        }
        if("*".equals(z))
        {
        System.out.println(e);
        }
        if("/".equals(z))
        {
        System.out.println(f);
        }
        System.exit(0);
    }
}

谢谢