不确定我在这里做错了什么,但输出是
输入2个数字 15 25(例如) 选择您是否要加,减,乘或除。
用户选择add
。什么都没发生?
import java.util.Scanner;
public class Lab1 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
System.out.println("Enter 2 numbers ");
int numb1 = input.nextInt();
int numb2 = input.nextInt();
System.out.println("Would you like to add, multiply, subtract or divide");
String add = input.next();
String multiply = input.next();
String divide = input.next();
String subtract = input.next();
if (input.equals(add)) {
System.out.println(numb1 + " + " + numb2 + " is: " + (numb1 + numb2));
}
else if (input.equals(multiply)) {
System.out.println(numb1 + " * " + numb2 + " is: " + (numb1 * numb2));
}
else if (input.equals(divide)) {
System.out.println(numb1 + " / " + numb2 + " is: " + (numb1 / numb2));
}
else if (input.equals(subtract)) {
System.out.println(numb1 + " - " + numb2 + " is: " + (numb1 - numb2));
}
else {
System.out.println("Try again");
}
}
}
答案 0 :(得分:1)
你的问题在这里:
String add = input.next();
String multiply = input.next();
String divide = input.next();
String subtract = input.next();
这些行中的每一行都会询问Scanner
输入并将其分配给单独的字符串。您可以使用调试器或在上面的块之后添加System.out.println(add);
语句来显示此处实际发生的情况。然后你这样做:
if (input.equals(add)) {
您现在正在检查Scanner
对象是否等于add
对象。由于这些是不同的类型,它们永远不会是平等的。
您应该首先将选项设置为常量:
static final String ADD = "add";
然后你需要得到输入:
String choice = input.nextLine();
然后你可以检查选择是否等于你的一个常数。
if (choice.equals(ADD))
请注意,next()
将返回下一个“令牌”,由Scanner
中设置的分隔符确定。您可能需要的是nextLine()
,它将获得一整行输入。在这种情况下,它可能并不重要,但如果你正在寻找一个完整的输入,它可能会。也就是说,你应该了解are some pitfalls。
如何使用枚举
由于评论中提到了这一点,因此以下是使用枚举实现此操作的方法。正如您所看到的,当您需要添加运算符时,这变得非常易于扩展:您不再需要担心修改main
函数,而只需添加新运算符及其行为即可。只有当Commands
永远不需要携带状态,而且只是行为时,你才会这样做,就像他们在这里一样。这种设置对于必须了解各种令牌的命令行程序特别有用(您可以实现equals
或其他方法来允许+
和Add
以及{{1}例如,所有都是等价的。
add
运行时示例:
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter 2 numbers ");
int numb1 = input.nextInt();
int numb2 = input.nextInt();
System.out.println("What would you like to do to these two numbers? Commands available are:");
for (Command command : Command.values()) {
System.out.println(command);
}
System.out.println("");
String operator = input.next();
for (Command command : Command.values()) {
if (command.toString().equals(operator)) {
command.printResult(numb1, numb2);
}
}
}
public interface CommandInterface {
public void printResult(int x, int y);
}
public enum Command implements CommandInterface {
ADD {
public void printResult(int x, int y) {
System.out.println(x + " + " + y + " is: " + (x + y));
}
},
SUBTRACT {
public void printResult(int x, int y) {
System.out.println(x + " + " + y + " is: " + (x + y));
}
},
MULTIPLY {
public void printResult(int x, int y) {
System.out.println(x + " + " + y + " is: " + (x + y));
}
},
DIVIDE {
public void printResult(int x, int y) {
System.out.println(x + " + " + y + " is: " + (x + y));
}
};
}
}
处理完成,退出代码为0
答案 1 :(得分:0)
你在这里犯了一些错误。
首先,您要从Enter 2 numbers
1 2
What would you like to do to these two numbers? Commands available are:
ADD
SUBTRACT
MULTIPLY
DIVIDE
ADD
1 + 2 is: 3
获取加,减等的值。相反,为那些创建input
常量。
例如:static final String
您还要检查static final String ADD = "Add";
与Scanner
的平等程度。那不是你想要的。当您询问他们想要执行哪些操作时,您可以通过String
获得该操作并将其与之前定义的字符串(例如input
)进行比较。
如果您确定输入完全匹配,则表示如下:
ADD
当然,您可以切换输入,如:
input.nextLine().equals(ADD);
...
答案 2 :(得分:0)
这是因为这些方面:
String add = input.next();
String multiply = input.next();
String divide = input.next();
String subtract = input.next();
您告诉它等待用户输入四个字符串,但用户只输入了一个字符串。你想要的是等待一个字符串,然后检查字符串以查看用户想要执行的操作。
答案 3 :(得分:0)
有很多方法可以满足您的需求,例如:使用if / else,switch。但到目前为止,我将用你所拥有的东西来做。我想提到的一件事是,如果你在一行中输入多个数字,你总是可以使用for循环,然后将它们转换为整数。
这是解决方案。希望它有所帮助!
import java.util.Scanner;
public class Lab1 {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
double result = 0;
String add = "add";
String multiply = "multiply";
String subtract = "subtract";
String divide = "divide";
System.out.println("Enter 2 numbers");
String str = input.nextLine();
String[] numbers = str.split(" ");
int[] myNumbers = new int[numbers.length];
for (int j = 0; j < numbers.length; j++) {
myNumbers[j] = Integer.parseInt(numbers[j]);
}
System.out
.println("Would you like to add, multiply, subtract or divide");
String choice = input.nextLine();
if (choice.equals(add)) {
for (int i = 0; i < myNumbers.length; i++) {
result = myNumbers[0] + myNumbers[myNumbers.length - 1];
}
System.out.println("The sum is: " + result);
}
else if (choice.equals(multiply)) {
for (int i = 0; i < myNumbers.length; i++) {
result = myNumbers[0] * myNumbers[myNumbers.length - 1];
}
System.out.println("numb1 * numb2 is: " + result);
}
else if (choice.equals(subtract)) {
for (int i = 0; i < myNumbers.length; i++) {
result = myNumbers[0] - myNumbers[myNumbers.length - 1] ;
}
System.out.println("numb1 - numb2 is: " + result);
}
else if (choice.equals(divide)) {
for (int i = 0; i < myNumbers.length; i++) {
result = (double)(myNumbers[0])/(double)myNumbers[myNumbers.length - 1] ;
}
System.out.println("numb1 / numb2 is: " + result);
}
else {
System.out.println("Try again");
}
}
}
答案 4 :(得分:0)
我无法通过字符串弄明白我在为操作员尝试String choice = input.nextLine();
时遇到错误,一旦我删除了静电,它就会消失,但仍然无法正常工作。将其更改为字符串if (choice.equals (add)){
然后执行import java.util.Scanner;
public class Lab1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter 2 numbers ");
int numb1 = input.nextInt();
int numb2 = input.nextInt();
System.out.println("Select 1 for addition.");
System.out.println("Select 2 for subtraction.");
System.out.println("Select 3 for division.");
System.out.println("Select 4 for multiplication.");
int choice = input.nextInt();
if (choice == 1) {
System.out.println(numb1 + " + " + numb2 + " is: " + (numb1 + numb2));
}
if (choice == 2) {
System.out.println(numb1 + " - " + numb2 + " is: " + (numb1 - numb2));
}
if (choice == 3) {
System.out.println(numb1 + " / " + numb2 + " is: " + (numb1 / numb2));
}
if (choice == 4) {
System.out.println(numb1 + " * " + numb2 + " is: " + (numb1 * numb2));
}
}
}
后,它会自动跳到else语句再次尝试。因为我理解,所以我只使用了int。感谢您的帮助。这只是java编程的介绍,我完全迷失了,看起来并不那么好。
new EditUserModel() { UserTranscripts = tr }