0

我最近做了一个程序是一个计算器,但出现了三个错误。这是代码:

import java.util.Scanner;
public class mathyStuff {
    public static void main(String[] args) throws InterruptedException {
        Scanner raw = new Scanner(System.in);
        String input = raw.nextLine();
        int y = 0;
        while (y < input.length()) {
            if (input.substring(y, y+1) == "+" || input.
            substring(y, y+1) == "-" ||  input.substring(y, y+1) == "/" ||  input.substring(y, y+1) == "*") {
                String x = input.substring(y, y+1);
                int z1 = Integer.parseInt(input.substring(0,y));
                int z2 = Integer.parseInt(input.substring(y+1, 0));
            }
            else {
                y = y + 1;
            }
        }
        math(z1,x,z2);
    }
    public static void math (int num1, String op, int num2) throws InterruptedException {
        if (op == "+") {
            System.out.println(String.valueOf(num1 + num2));
        }
        if (op == "-") {
            System.out.println(String.valueOf(num1 - num2));
        }
        if (op == "*") {
            System.out.println(String.valueOf(num1 * num2));
        }
        if (op == "/") {
            System.out.println(String.valueOf(num1 / num2));
        }
    }
}

这是错误:

Compilation Errors Detected

Line: 18
cannot find symbol
  symbol:   variable z1
  location: class mathyStuff

Line: 18
cannot find symbol
  symbol:   variable x
  location: class mathyStuff

Line: 18
cannot find symbol
  symbol:   variable z2
  location: class mathyStuff

我目前正在使用一个名为 browxy 的网站,这是一个在线 Java 编译器。是的,我知道。下载日食。我不能随身携带我的电脑,所以我改用它。

4

2 回答 2

1

这是一个范围问题。

您无法访问 x、z1 和 z2,因为它们是在 while 循环内声明的,但您正试图在 while 循环外访问它们。

您可能希望将math函数调用移动到循环内的if块内。while

于 2015-05-06T22:09:39.523 回答
0

在 java 无法确认变量已定义的情况下,您实际上是在请求一个变量。您需要在调用这些变量之前结束的任何 while 循环或 if 循环之外的位置预先定义变量。
尝试在以下内容之前添加此内容int y = 0;
int z1 = 0; int z2 = 0;
另外,您在哪里定义x?如果您指的是字符串 x,则需要"x"在第 18 行编写。如果您指的是名为 x 的变量,请确保它在正确的范围内定义。事实上,我在任何地方都找不到它。

旁注:您的数学方法不能将“x”作为第二个变量的输入。它只需要“+”、“-”、“*”和“/”。如果您希望能够使用“x”,则需要更改您的数学方法。

于 2015-05-06T22:17:33.980 回答