[英]Simple Java calculator
首先,这不是家庭作业问题。 我正在练习我的Java知识。 我想一个很好的方法是在没有帮助的情况下编写一个简单的程序。 不幸的是,我的编译器告诉我错误,我不知道如何修复。 在不改变太多逻辑和代码的情况下,有人可以指出我的一些错误在哪里吗? 谢谢
import java.lang.*;
import java.util.*;
public class Calculator
{
private int solution;
private int x;
private int y;
private char operators;
public Calculator()
{
solution = 0;
Scanner operators = new Scanner(System.in);
Scanner operands = new Scanner(System.in);
}
public int addition(int x, int y)
{
return x + y;
}
public int subtraction(int x, int y)
{
return x - y;
}
public int multiplication(int x, int y)
{
return x * y;
}
public int division(int x, int y)
{
solution = x / y;
return solution;
}
public void main (String[] args)
{
System.out.println("What operation? ('+', '-', '*', '/')");
System.out.println("Insert 2 numbers to be subtracted");
System.out.println("operand 1: ");
x = operands;
System.out.println("operand 2: ");
y = operands.next();
switch(operators)
{
case('+'):
addition(operands);
operands.next();
break;
case('-'):
subtraction(operands);
operands.next();
break;
case('*'):
multiplication(operands);
operands.next();
break;
case('/'):
division(operands);
operands.next();
break;
}
}
}
operands
和operators
超出了 main 的范围。 您在构造函数中声明局部变量,因此当您退出构造函数时,它们有资格进行 GC 并消失。
您有编译错误 - 其中 10 个。
package org.com;
import java.lang.*;
import java.util.*;
public class Calculator
{
private int solution;
private static int x;
private static int y;
private char operators;
public Calculator()
{
solution = 0;
Scanner operators = new Scanner(System.in);
Scanner operands = new Scanner(System.in);
}
public int addition(int x, int y)
{
return x + y;
}
public int subtraction(int x, int y)
{
return x - y;
}
public int multiplication(int x, int y)
{
return x * y;
}
public int division(int x, int y)
{
solution = x / y;
return solution;
}
public void calc(int ops){
x = 4;
System.out.println("operand 2: ");
y = 5;
switch(ops)
{
case(1):
System.out.println(addition(x, y));
// operands.next();
break;
case(2):
System.out.println(subtraction(x, y));
// operands.next();
break;
case(3):
System.out.println(multiplication(x, y));
// operands.next();
break;
case(4):
System.out.println(division(x, y));
// operands.next();
break;
}
}
public static void main (String[] args)
{
System.out.println("What operation? ('+', '-', '*', '/')");
System.out.println(" Enter 1 for Addition");
System.out.println(" Enter 2 for Subtraction");
System.out.println(" Enter 3 for Multiplication");
System.out.println(" Enter 4 for Division");
Calculator calc = new Calculator();
calc.calc(1);
}
}
这将工作
另一个问题是,线
y = operands.next();
试图将从Scanner.next()
返回的String
放入声明为int
类型的变量y
中。
Scanner.nextInt()
方法可用于尝试返回int
。
package com.abc;
import java.util.Scanner;
public class Calculator {
private static final String pos = "+";
private static final String neg = "-";
private static final String mult = "*";
private static final String div = "/";
private enum operation {
pos, neg, mult, div
};
private int solution;
private int x;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
private int y;
static Scanner operators;
public Calculator() {
solution = 0;
operators = new Scanner(System.in);
}
public int addition(int x, int y) {
return x + y;
}
public int subtraction(int x, int y) {
return x - y;
}
public int multiplication(int x, int y) {
return x * y;
}
public int division(int x, int y) {
solution = x / y;
return solution;
}
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println("Insert 2 numbers");
System.out.println("operand 1: ");
calc.setX(Integer.parseInt(operators.next()));
System.out.println("operand 2: ");
calc.setY(Integer.parseInt(operators.next()));
System.out.println("What operation? ('pos', 'neg', 'mult', 'div')");
operation ttt = operation.valueOf(operators.next());
int output = 0 ;
switch(ttt){
case pos:
output = calc.addition(calc.getX(), calc.getY());
break;
case neg:
output = calc.subtraction(calc.getX(), calc.getY());
break;
case mult:
output = calc.multiplication(calc.getX(), calc.getY());
break;
case div:
output = calc.division(calc.getX(), calc.getY());
break;
}
System.out.println("output ="+output);
}
}
这一切都很棒,但是您使用什么程序来编写 Java? 也许您应该考虑使用 Eclipse 之类的 IDE,因为它可以自动检测错误并添加导入。 (我不确定你的是否这样做)它还告诉你你的程序的问题是“英语”。 另外,考虑这个类可能是一种更简单、更简单的计算器方式:
public class Calculator {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter an Operator: ");
String in = sc.next();
char oper = in.charAt(0);
System.out.print("Enter a number: ");
in = sc.next();
double num1 = Double.parseDouble(in);
System.out.print("Enter another number: ");
in = sc.next();
double num2 = Double.parseDouble(in);
if(oper == '+') {
double result = num1 + num2;
System.out.println(result);
} else if(oper == '-') {
double result = num1 - num2;
System.out.println(result);
} else if(oper == 'x') {
double result = num1 * num2;
System.out.println(result);
} else if(oper == '/') {
double result = num1 / num2;
System.out.println(result);
} else {
double result = num1 % num2;
System.out.println(result);
}
System.out.println("Hope this helped your mathmatical troubles!");
}
}
作为一个习惯问题,而不是这样做:
import java.util.*;
最好这样做:
import java.util.Scanner;
这在这里可能没有太大区别,但是如果您正在运行一个更大的程序,则导入整个 java.util 会大大减慢您的程序速度。
希望这可以帮助!
除了其他答案之外,您的 main() 方法必须是静态的才能成为程序入口点。 在 main() 中,您需要构建自己的 Calculator 对象,并在其上调用方法。
您的主要方法需要像这样声明:
public static void main(String[] args) {..}
此外,您似乎只为所有算术方法(加法、减法等)提供一个参数,尽管它们需要两个。
public int addition(int x, int y);
不能用addition(operands)
调用,即只有一个参数,并且参数类型错误(该方法需要两个int
,你给它一个Scanner
)。 所有这些方法也是如此。 您需要从Scanner
提取int
。 你可以用Scanner.nextInt()
做到这一点。
import java.lang.*;
import java.util.*;
public class Calculator
{
private int solution;
private int x;
private int y;
private char operators;
public Calculator()
{
solution = 0;
Scanner operators = new Scanner(System.in);
Scanner operands = new Scanner(System.in);
}
public int addition(int x, int y)
{
return x + y;
}
public int subtraction(int x, int y)
{
return x - y;
}
public int multiplication(int x, int y)
{
return x * y;
}
public int division(int x, int y)
{
solution = x / y;
return solution;
}
public void main (String[] args)
{
System.out.println("What operation? ('+', '-', '*', '/')");
System.out.println("Insert 2 numbers to be subtracted");
System.out.println("operand 1: ");
x = operands;
System.out.println("operand 2: ");
y = operands.next();
switch(operators)
{
case('+'):
addition(operands);
operands.next();
break;
case('-'):
subtraction(operands);
operands.next();
break;
case('*'):
multiplication(operands);
operands.next();
break;
case('/'):
division(operands);
operands.next();
break;
}
}
}
你要求用户输入整数,但你把语句operands.next();
作为输入。 尽量与您的变量和用户输入保持一致,因此将其更改为operands.nextInt()
会有所帮助。
作为一个提示,开始投掷通常不是一个好主意
import java.util.*;进入你的程序,因为它使程序不必要地大而慢。 你所需要的只是
导入 java.util.Scanner;如果我是对的,java.lang 中的大部分内容(如果不是所有内容)都已为您导入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.