方法和声明java

时间:2015-08-28 22:16:04

标签: java variables methods declaration

我正在尝试制定计划以确定学校的平均值。我将把所有文件保存到计算机中,以便于多次使用它们。我说要创建多种方法并发现问题。我在启动方法中为主题提供了用户输入,但在方法中,使用了 sub (主题字符串)并且它表示“sub无法解析为变量”我理解为什么会这样说但我不确定如何修复。 这是我的代码:

public class Calculator {
static int x;
static int b;


public static void startup() {
    System.out.println("**Receiving User**");
    String user = System.getProperty("user.home");
    System.out.println("**Checking Directories**");
    boolean dir = new File(user + "/Library/Application Support/Average_Calculator/Settings/").mkdirs();
    if (dir) {
        System.out.println("**Directory Created at:" + user + "/Library/Application Support/Average_Calculator/**");
    } else {
        System.out.println("**Directory Has Already Been Created at:" + user
                + "/Library/Application Support/Average_Calculator/**");
    }
    System.out.println("Welcome to the Average Calculator");
    System.out.println("Please input the subject average you want to calculate(no caps)");
    Scanner scan = new Scanner(System.in);
    String sub = scan.nextLine();
    // System.out.println(sub);
    try {
        // System.out.println("It Does!");
        FileOutputStream saveFile = new FileOutputStream(
                user + "/Library/Application Support/Average_Calculator/" + sub + ".sav");
        ObjectOutputStream save = new ObjectOutputStream(saveFile);
        FileOutputStream SetsaveFile = new FileOutputStream(
                user + "/Library/Application Support/Average_Calculator/Settings/" + "Setting" + sub + ".sav");
        ObjectOutputStream setsave = new ObjectOutputStream(SetsaveFile);
        // Create an ObjectOutputStream to put objects into save file.

        // Close the file.
        save.close();
        setsave.close();// This also closes saveFile.
    } catch (Exception exc) {
        exc.printStackTrace(); // If there was an error, print the info.
    }

}

public static void main(String[] args) {
    startup();
    System.out.println(sub);
    try {
        // Open file to read from, named SavedObj.sav.
        FileInputStream saveFile = new FileInputStream(sub + ".sav");

        // Create an ObjectInputStream to get objects from save file.
        ObjectInputStream save = new ObjectInputStream(saveFile);

        x = (Integer) save.readObject();
        b = (Integer) save.readObject();

        // Close the file.
        save.close(); // This also closes saveFile.
    } catch (Exception exc) {
        // exc.printStackTrace(); // If there was an error, print the info.
    }

    // Print the values, to see that they've been recovered.
    System.out.println(x);
    System.out.println(b);

    // All done.
}
}

感谢您的帮助! PS我是方法和类的新手,非常感谢解释!

3 个答案:

答案 0 :(得分:2)

sub目前是startup()的本地变量,因此main()无法访问它。

一种解决方案是让startup()返回sub的值,并让main()使用返回的值。

第二种解决方案是将sub(以及任何其他共享变量)声明为static类的Calculator变量,这将使其置于两个静态方法的范围内。在这种情况下,您必须不再在sub内本地声明startup(),因为这会导致该方法忽略具有相同名称的静态变量。

答案 1 :(得分:0)

您在启动方法中声明了sub,但尝试在main方法中访问它。方法中声明的变量范围仅限于该方法;这意味着一旦您离开该方法,该变量将不再可访问。如果要访问变量两个方法,一个选项是使其成为类的属性,就像您对x和b所做的那样。另一种选择是在启动方法结束时返回sub的值,然后只需将调用打印到main中的方法。

Here是关于课程的一个很好的解释。 Here是对方法的一个很好的解释(你可以忽略关于函数的部分;对方法的解释仍然很好)。

答案 2 :(得分:0)

您的启动功能正在返回空白。改变这一行:

public static void startup() {

到此:

public static String startup() {

和这一行:

startup();

到此:

String sub = startup();