JAVA:基本的java逻辑

时间:2014-07-11 22:46:46

标签: java

我一直在使用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>();

进入类构造函数,但是没有成功。有人可以解释一下这背后的一些逻辑,因为这显然是我所缺少的。为了练习,我怎样才能以一种很好的方式将这些代码拆分成方法? +如果有人知道一个好的地方来阅读这样的逻辑,我会受到极大的赞赏。

提前致谢。

3 个答案:

答案 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)

这里有几个问题。

  1. 类名称应为大写,在本例中为Test(约定)
  2. 主方法的类应该是public(约定)
  3. ST不是Java的一部分(在您的评论中,您编写了库的一部分,此信息应该是问题的一部分),同样适用于StdInStdOut。< / LI>
  4. 您的课程在默认包中,可以进行测试。
  5. 要真正解决您的问题,有几个解决方案。 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);
        }
    }