方法和声明 java
Methods and declaration java
我正在尝试制作一个程序来确定学校的平均水平。我会将所有文件保存到计算机中,以便轻松访问它们以供多次使用。我说要创建多个方法并发现一个问题。我在 startup 方法中有一个主题的用户输入,但在 main 方法中,sub (主题字符串)被使用并且它说 "sub cannot be resolved to a variable" 我理解它为什么这么说,但我不确定如何修复。
这是我的代码:
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 我是方法的新手 类,非常感谢您的解释!
sub
目前是startup()
的局部变量,所以main()
没有权限访问它。
一个解决方案是 startup()
return sub
的值,并 main()
使用 returned 值。
第二种解决方案是将 sub
(和任何其他共享变量)声明为 Calculator
class 的 static
变量,这会将它放在两个静态方法的范围。在这种情况下,您不能再在 startup()
中局部声明 sub
,因为这会导致该方法忽略具有相同名称的静态变量。
您在启动方法中声明了 sub,但试图在 main 方法中访问它。方法中声明的变量范围仅限于该方法;这意味着一旦您离开该方法,就无法再访问该变量。如果你想访问一个变量,这两种方法一个选择是使它成为 class 的 属性 就像你对 x 和 b 所做的那样。另一种选择是 return 启动方法末尾的 sub 值,然后简单地打印对 main 中方法的调用。
Here 是对 classes 的一个很好的解释。
Here对方法的解释很好(函数部分可以忽略,方法的解释还是不错的)。
您的启动函数返回一个空值。更改此行:
public static void startup() {
对此:
public static String startup() {
和这一行:
startup();
对此:
String sub = startup();
我正在尝试制作一个程序来确定学校的平均水平。我会将所有文件保存到计算机中,以便轻松访问它们以供多次使用。我说要创建多个方法并发现一个问题。我在 startup 方法中有一个主题的用户输入,但在 main 方法中,sub (主题字符串)被使用并且它说 "sub cannot be resolved to a variable" 我理解它为什么这么说,但我不确定如何修复。 这是我的代码:
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 我是方法的新手 类,非常感谢您的解释!
sub
目前是startup()
的局部变量,所以main()
没有权限访问它。
一个解决方案是 startup()
return sub
的值,并 main()
使用 returned 值。
第二种解决方案是将 sub
(和任何其他共享变量)声明为 Calculator
class 的 static
变量,这会将它放在两个静态方法的范围。在这种情况下,您不能再在 startup()
中局部声明 sub
,因为这会导致该方法忽略具有相同名称的静态变量。
您在启动方法中声明了 sub,但试图在 main 方法中访问它。方法中声明的变量范围仅限于该方法;这意味着一旦您离开该方法,就无法再访问该变量。如果你想访问一个变量,这两种方法一个选择是使它成为 class 的 属性 就像你对 x 和 b 所做的那样。另一种选择是 return 启动方法末尾的 sub 值,然后简单地打印对 main 中方法的调用。
Here 是对 classes 的一个很好的解释。 Here对方法的解释很好(函数部分可以忽略,方法的解释还是不错的)。
您的启动函数返回一个空值。更改此行:
public static void startup() {
对此:
public static String startup() {
和这一行:
startup();
对此:
String sub = startup();