如何从另一个类访问输入变量? java的

时间:2016-01-14 08:05:02

标签: java

尝试让第一堂课识别用户在第二堂课中输入的内容。关于这里出了什么问题的任何想法?第二节工作正常,但当我试着打电话'输入'来自主要课程,它说'输入'无法解决。任何建议和指针非常感谢。谢谢你的时间。

第一堂课:

public class Filter {

   public static void main(String[] args) throws IOException { 
      BufferedReader in4 = new BufferedReader(new StringReader(automata.input));

      String s = input.readLine();
      while (automata.UserInput()==true){
         if (automata.accepts(s)) System.out.println(s); 
         s = input.readLine();
      }
   }
}

第二课:

public class automata extends Filter {

public static String input;
public static boolean UserInput() {

    System.out.println("Please enter test data: ");
    Scanner user_input = new Scanner(System.in);
    input = user_input.next();

    if (accepts(input) == true){
         System.out.print("works");
         return true;
     } else { 
       System.out.println("Problem");
       return false;
     }
}

6 个答案:

答案 0 :(得分:1)

第二课应该是这样的:

<![CDATA[ "-->code here<--" ]]>

然后你必须以这种方式访问​​该类:

public class Automata { // we use upper case for class names

   public String input; // or better private and use a get-method

   public Automata() {} // constructor

   public boolean readUserInput() { // lower case here
        System.out.println("Please enter test data: ");
        Scanner user_input = new Scanner(System.in);
        String nextInput = user_input.next();
        input += nextInput; // otherwise you overwrite your current input
        /*if (accepts(input) == true){
            System.out.print("works");
            // return true;
        } else { 
            System.out.println("Problem");
            return false;
        }*/
        // It is a terrible idea to return every time a single word is read
        // rather read the whole String and then check if it is accepted
        if (accept(input)) // whole String is checked
            return true;
        return false;
    }
    // in case the input variable is private
    public String getInput() {
         return input;
    }
}

答案 1 :(得分:1)

您对两个不同的事物感到困惑: Class Object ObjectInstance的{​​{1}}。如果不理解这一点,你就无法理解这里有什么问题。 例如,调用Class会创建类Automata automata = new Automata()的新Object

Automata永远无法帮助您获取变量。它可以帮助您"Extends"当前extend并使用已在父类中实现的方法,但是您永远无法访问该父类的地址空间上的指针。 要访问另一个对象的变量,您应该在中为该变量声明class getter方法。

答案 2 :(得分:1)

我认为你需要更换 String s = input.readLine(); 通过 String s = in4.readLine();在Filter类中。 因为readLine()是BufferedReader类的方法

答案 3 :(得分:1)

尝试在输入中重命名BufferedReader的名称,如下所示:

  BufferedReader input = new BufferedReader(new StringReader(automata.input));

答案 4 :(得分:1)

我认为你有一个错字..

将第1课中的输入更改为 in4

'input'变量在第二个类中声明,你试图在第一个类中访问它,这是不可能的。

答案 5 :(得分:1)

在课程Filter中,您没有任何名为input的成员,因为编译时异常将发送到input.readLine();

从您的计划环境来看,似乎应该使用in4代替input

public class Filter {

   public static void main(String[] args) throws IOException { 
      BufferedReader in4 = new BufferedReader(new StringReader(automata.input));

      String s = in4.readLine();
      while (automata.UserInput()==true){
         if (automata.accepts(s)) System.out.println(s); 
         s = in4.readLine();
      }
   }
}