CommandLine Java Calculator

别说谁变了你拦得住时间么 提交于 2019-12-05 23:22:56

Hovercraft Full Of Eels has already pointed you to the reason for the NullPointerException. In addition to that, I see quite a few things that could be improved in your code. Here's how I'd do it:

import java.util.Scanner;

public class SimpleCalculator {

    public static void main(String[] args) {
        System.out.println("Please enter your calculation");
        Scanner scanner = new Scanner(System.in);
        int left = scanner.nextInt();
        String op = scanner.next();
        int right = scanner.nextInt();
        System.out.println(compute(left, op, right));
    }

    private static int compute(int left, String op, int right) {
        switch (op.charAt(0)) {
        case '+':
            return left + right;
        case '-':
            return left - right;
        case '*':
            return left * right;
        case '/':
            return left / right;
        }
        throw new IllegalArgumentException("Unknown operator:" + op);
    }
}

Note that the Scanner assumes there is whitespace before and after the operator.

Example output:

Please enter your calculation
1 + 2
3

The improvements in detail:

  1. Variables may be declared where you first use them. It is customary in Java to take advantage of that (shorter code size, no need to repeat the variable name.)
  2. Scanner provides tokenizing in addition to reading the entire line. No need to reinvent the wheel.
  3. char (being an integer type) can be switched on.

You declare:

char[] tempnum = null;

But where do you set it = to a non-null value? So any time you try to use it as if it were a fully actuated object, you'll get a NPE thrown.

Edit: there are other issues in your code including calling toString() on an array which will return array's default toString -- not what you want in that situation.

So rather than this:

tempnumstr = tempnum.toString();

You probably want something like this:

tempnumstr = new String(tempnum); 

or possibly

tempnumstr = new String(tempnum).trim(); // get rid of trailing whitespace if needed

Edit 2: You appear to have two char arrays in your program, tempnum and testchar, one that you fill with chars and one you don't. What is the purpose of both of them? Consider peppering your code with some comments too so we can understand it better and better be able to help you.

Your problem is this line:

tempnum[t] = testchar[t];

Which will throw a NullPointerException as you previously declared it as null: char[] tempnum = null;

You need to change it to char[] tempnum = new char[size]; which will initialise it to an empty array to hold type char. Where size is any integer.

char[] tempnum = null;

should be set to something like

char[] tempnum = new char[4];

basically it is null when used at line 38.

On line 38 you try to acces the variable tempnum which is initialized to null you have to initialize the variable tempnum like this: tempnum = new char[n] where n will be the length of the array

You forgot to allocate tempNum which results in a NUllPointerException when you try to use it in an array context.

char[].toString() won't do what you expect (it returns a hashcode for the array object), to create a string using the contents of the array use new String(char[]).

First of all, it error at this line: tempnum[t] = testchar[t]; Reason: tempnum have not point to any thing (null) Fix: tempnum = testchar; or tempnum = new char[testchar.length]

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!