Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果您使用的对象接受不断变化的参数,如何通过循环获取任意数量的输入?_Java_Loops_Parsing_Object_Arguments - Fatal编程技术网

Java 如果您使用的对象接受不断变化的参数,如何通过循环获取任意数量的输入?

Java 如果您使用的对象接受不断变化的参数,如何通过循环获取任意数量的输入?,java,loops,parsing,object,arguments,Java,Loops,Parsing,Object,Arguments,这是家庭作业,所以我不想发布代码或让别人帮我做。我是一名java入门的学生 我创建了一个解析器类,它基本上验证输入的格式。任务要求我接受任意数量的输入。我选择使用do-while循环来执行此操作。因此,在循环开始之前,我声明了我的变量(包括Parser;)。然后,我继续我的do while并向用户请求一个表达式,将其存储为一个名为句子的字符串,然后将解析器初始化为parser=newparse(句子)。在main方法的末尾,我询问用户是否希望检查另一个句子,看看它在语法上是否有效 然而,当我第二

这是家庭作业,所以我不想发布代码或让别人帮我做。我是一名java入门的学生

我创建了一个解析器类,它基本上验证输入的格式。任务要求我接受任意数量的输入。我选择使用do-while循环来执行此操作。因此,在循环开始之前,我声明了我的变量(包括Parser;)。然后,我继续我的do while并向用户请求一个表达式,将其存储为一个名为句子的字符串,然后将解析器初始化为parser=newparse(句子)。在main方法的末尾,我询问用户是否希望检查另一个句子,看看它在语法上是否有效

然而,当我第二次迭代时,显然我不能将其初始化为=new解析,因为第二次它不是新的!但是我不能在do while循环之前初始化它,因为否则这个句子将是空的。解析器是以伪代码的形式提供给我的,我无法更改它的功能


谢谢你的帮助

您在这里有一些选择,根据您的任务要求,您将决定哪一个是最好的

在循环前声明,在循环内赋值。 从事物的声音来看,这可能是你的老师想要你做的

Parser parser;
while (...) { //Your read logic
    parser = new Parser(sentence);
    parser.parse();
}
您基本上设置了一个变量,该变量将保存对
解析器
实例的引用。在循环的每次迭代中,您都会创建一个
Parser
的新实例,并将其引用分配给
Parser
变量。现在,当您取消引用
解析器
变量时,它将查找其持有引用的实例。
是Java中用于对象的解引用操作符

在循环外初始化,并在循环内调用方法。为了防止在循环的每次迭代中创建对象,可以在循环外初始化
解析器的单个实例。然后,您可以简单地将您的句子输入到
parse
方法

Parser parser = new Parser();

while (...) {
    parser.parse(sentence);
}
如果您的
解析器
类维护状态——换句话说,在
parse
方法期间分配类成员变量值——那么这可能不是最佳选择。虽然它仍然适用于所呈现的场景,但如果您有一个需要进行并发或异步处理的场景,则可能会遇到问题


我想你的任务可能是想让你走第一条路。您的老师可能希望将解析的结果状态存储在
解析器
类中。这些数据随后将被引用


我个人认为这是错误的,我想很多软件工程师都会同意。我可能会让parse方法返回表示解析结果的POJO(纯旧Java对象)。如果它除了解析之外还将解析结果存储为对象的成员(因此,
Parser
也是
ParsedObject
),那么它可能被认为违反了单一责任原则。

解析器类是以伪代码的形式提供给我的。我们得到一个语言语法,必须验证语法定义的语言中是否存在输入。对象接受一个句子,然后调用parse()检查它。但我想我会改变这一点,我真的不在乎她是否因为偏离准则而扣了几分。请在尝试问更多问题之前阅读。