我一直在使用java,但是有一些我似乎永远无法理解的小逻辑事情,我会马上给出一个例子。 我目前有这个代码:
class test {
public static void main(String[] args) {
ST<String, Integer> st;
st = new ST<String, Integer>();
for (int i = 0; !StdIn.isEmpty(); i++) {
String key = StdIn.readString();
st.put(key, i);
}
st.put("P", 5); // Put method
for (String s : st.keys()) {
StdOut.println(s + " " + st.get(s));
}
}
}
它的作用是创建符号表并从提供的文件中插入一些数据。如您所见,我有一个put方法,它在键“P”上插入值5。我想为了练习而为此创建一个方法。 所以我所做的是:
public static void addValue() {
st.put("P", 5);
}
并在我的代码中调用该方法而不是“put”方法。但是我无法编译它,因为方法“addValue”不知道变量st
。
然后我想把这两行:
ST<String, Integer> st;
st = new ST<String, Integer>();
进入类构造函数,但是没有成功。有人可以解释一下这背后的一些逻辑,因为这显然是我所缺少的。为了练习,我怎样才能以一种很好的方式将这些代码拆分成方法? +如果有人知道一个好的地方来阅读这样的逻辑,我会受到极大的赞赏。
提前致谢。
答案 0 :(得分:2)
变量st
仅为main方法所知,因为您在那里声明了它。要允许从其他方法访问,您应该创建一个类成员。这是应该做你想做的课:
class test {
private static ST<String, Integer> st;
public static void main(String[] args) {
st = new ST<String, Integer>();
for (int i = 0; !StdIn.isEmpty(); i++) {
String key = StdIn.readString();
st.put(key, i);
}
addValue();
for (String s : st.keys()) {
StdOut.println(s + " " + st.get(s));
}
}
public static void addValue() {
st.put("P", 5);
}
}
答案 1 :(得分:2)
您可以将其添加为班级成员
class test {
private static ST<String, Integer> st;
public static void main(String[] args) {
st = new ST<String, Integer>();
for (int i = 0; !StdIn.isEmpty(); i++) {
String key = StdIn.readString();
st.put(key, i);
}
addValue();
for (String s : st.keys()) {
StdOut.println(s + " " + st.get(s));
}
}
public static void addValue() {
st.put("P", 5);
}
}
或将其作为变量传递
public static void addValue(ST<String, Integer> st) {
st.put("P", 5);
}
然后从您的主要方法中,您可以致电
addValue(st);
答案 2 :(得分:1)
这里有几个问题。
Test
(约定)ST
不是Java的一部分(在您的评论中,您编写了库的一部分,此信息应该是问题的一部分),同样适用于StdIn
和StdOut
。< / LI>
要真正解决您的问题,有几个解决方案。 BlithE已经向你展示了一个,另一个是David Zhou在评论中提到的:
// missing ST StdIn and StdOut, they probably need too be imported
public class Test {
public static void main(String[] args) {
ST<String, Integer> st;
st = new ST<String, Integer>();
for (int i = 0; !StdIn.isEmpty(); i++) {
String key = StdIn.readString();
st.put(key, i);
}
addValue(st);
for (String s : st.keys()) {
StdOut.println(s + " " + st.get(s));
}
}
public static void addValue(ST<String, Integer> st) {
st.put("P", 5);
}
}