gpt4 book ai didi

java - 命令行 Java 计算器

转载 作者:搜寻专家 更新时间:2023-11-01 04:03:29 25 4
gpt4 key购买 nike

我刚刚学习了 Java,但根据我以前使用 C++ 的经验,我认为我可以编写一个命令行计算器,它只需一行即可支持所有 4 个基本运算符。但是我有点问题。

这是我的代码:

import java.util.Scanner;

public class omg {
public static void main(String args[]) {
int fnum,snum,anum = 0;
String strtype; //The original calculation as string
char[] testchar; //Calculation as chararray
char currentchar; //current char in the char array for the loop
int machinecode = 0; //Operator converted to integer manually
String tempnumstr; //first and second numbers temp str to be converted int
int operatorloc = 0; //operator location when found
char[] tempnum = new char[256];
Scanner scan = new Scanner(System.in); // The scanner obviously
System.out.println("Enter The Calculation: ");
strtype = scan.nextLine();
testchar = strtype.toCharArray(); //converting to char array
for(int b = 0; b < testchar.length; b++) //operator locating
{
currentchar = testchar[b];
if(currentchar == '+') {
machinecode = 1;
operatorloc = b;
}
else if(currentchar == '-') {
machinecode = 2;
operatorloc = b;
}
else if(currentchar == '*') {
machinecode = 3;
operatorloc = b;
}
else if(currentchar == '/') {
machinecode = 4;
operatorloc = b;
}
}
for(int t = 0;t < operatorloc;t++) { //transferring the left side to char
tempnum[t] = testchar[t];
}
tempnumstr = tempnum.toString(); //converting char to string
fnum = Integer.parseInt(tempnumstr); //parsing the string to a int
for(int temp = operatorloc;temp < testchar.length;temp++) { //right side
for(int t = 0;t<(testchar.length-operatorloc);t++) {
tempnum[t] = testchar[temp];
}
}
tempnumstr = tempnum.toString(); //converting to char
snum = Integer.parseInt(tempnumstr); //converting to int
switch(machinecode) { //checking the math to be done
case 1:
anum = fnum + snum;
break;
case 2:
anum = fnum - snum;
break;
case 3:
anum = fnum * snum;
break;
case 4:
anum = fnum / snum;
}
System.out.println(anum); //printing the result
}
}

这是我的代码,但是当我运行它时,它会询问我计算结果,然后给出这个错误。

Exception in thread "main" java.lang.NullPointerException
at omg.main(omg.java:38)

可能有更好、更简单的方法来做到这一点,我想听到更好的方法和适合我的方法的修复方法。提前致谢

最佳答案

您声明:

char[] tempnum = null;

但是你在哪里设置它 = 为一个非空值呢?因此,任何时候您尝试将它当作完全驱动的对象来使用时,都会抛出 NPE。

编辑:您的代码中还有其他问题,包括在数组上调用 toString(),这将返回数组的默认 toString——在那种情况下不是您想要的。

所以而不是这样:

tempnumstr = tempnum.toString();

你可能想要这样的东西:

tempnumstr = new String(tempnum); 

或者可能

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

编辑 2:您的程序中似乎有两个字符数组,tempnum 和 testchar,一个用字符填充,一个不用。他们两个的目的是什么?考虑在您的代码中加入一些注释,以便我们更好地理解它并更好地帮助您。

关于java - 命令行 Java 计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7138038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com