尝试让第一堂课识别用户在第二堂课中输入的内容。关于这里出了什么问题的任何想法?第二节工作正常,但当我试着打电话'输入'来自主要课程,它说'输入'无法解决。任何建议和指针非常感谢。谢谢你的时间。
第一堂课:
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;
}
}
答案 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 。 Object
是Instance
的{{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();
}
}
}