繁体   English   中英

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

[英]How to take any number of inputs through a loop if you are using an object that accepts a changing argument?

这是家庭作业,所以我不想发布代码或让别人为我做。 我是一名介绍 Java 的学生。

我创建了一个 Parser 类,它基本上验证输入的格式。 作业要我接受任意数量的输入。 我选择使用 do while 循环来完成此操作。 所以在循环开始之前,我声明了我的变量(包括 Parser parser; )。 然后我继续我的 do while 并要求用户提供一个表达式,将其存储为一个名为 sentence 的字符串,然后将解析器初始化为 parser = new Parse(sentence)。 在 main 方法的最后,我询问用户他们是否想检查另一个句子以查看它在语法上是否有效。

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

谢谢你的帮助!

您在这里有几个选择,您可以根据自己的任务要求找出最佳选择。

在循环前声明,在循环内赋值。 这可能是您的老师希望您从事物的声音中做的事情。

Parser parser;
while (...) { //Your read logic
    parser = new Parser(sentence);
    parser.parse();
}

您基本上设置了一个变量,该变量将保存对Parser实例的引用。 每次循环迭代,您都会创建Parser一个新实例,并将对它的引用分配给您的parser变量。 现在,当您取消引用parser变量时,它将查找它持有引用的实例。 . 是 Java 中用于对象时的解引用运算符。

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

Parser parser = new Parser();

while (...) {
    parser.parse(sentence);
}

如果您的Parser类维护状态 - 换句话说,在parse方法期间分配类成员变量值 - 那么这可能不是最佳选择。 虽然它对于呈现的场景仍然可以正常工作,但如果您有需要进行并发或异步处理的场景,您可能会遇到问题。


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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM