我试图编写一个简单的复数计算器,可以计算以下表达式:
编辑:我注意到第一个前瞻性读数是10,而不是0。我如何解决这个问题?
我的代码:
import java.io.*;
import static java.util.Objects.requireNonNull;
public class Parser {
private int lookahead;
private StreamTokenizer tokenizer;
private final Reader input;
private final Writer output;
public Parser(Reader input, Writer output) throws IOException {
this.input = requireNonNull(input);
this.output = requireNonNull(output);
this.lookahead = this.input.read();
}
private void next() throws IOException {
lookahead = tokenizer.nextToken();
}
private void match(int expected) throws IOException {
if (lookahead != expected) {
switch(expected) {
case '(':
System.out.println("Error, missing opening round bracket.");
break;
case ')':
System.out.println("Error, missing closing round bracket.");
break;
case 'i':
System.out.println("Error, missing i");
break;
case '+':
System.out.println("Error, missing +");
default:
return;
}
} else {
next();
}
}
private void parseExpr() throws IOException {
long[] parameters = new long[4];
int i = 0;
if (lookahead == '(') {
match('(');
if (lookahead == StreamTokenizer.TT_NUMBER) {
parameters[i] = lookahead;
i++;
next();
} else {
System.out.println("Not a number.");
return;
}
match('+');
if (lookahead == StreamTokenizer.TT_NUMBER) {
parameters[i] = lookahead;
i++;
next();
} else {
System.out.println("Not a number.");
return;
}
match('i');
match(')');
if(lookahead == '+'){
next();
parseExpr();
System.out.println("(" + (parameters[0]+parameters[2]) + "+" +(parameters[1]+parameters[3]) + "i)");
}
if(lookahead == '-'){
next();
parseExpr();
System.out.println("(" + (parameters[0]-parameters[2]) + "+" +(parameters[1]-parameters[3]) + "i)");
}
}
System.out.println("Sorry, I can't help you");
}
public static void main(String[] args) throws IOException {
InputStreamReader reader = new InputStreamReader(System.in);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(outputStream);
Parser parse = new Parser(reader, writer);
parse.parseExpr();
writer.close(); // Close and flush output stream writer.
String output = outputStream.toString();
System.out.println("Output generated by parser: " + output);
}
}
但它总是输出“对不起,我帮不了你。”
我已经测试了您的代码,我有两条意见可以帮助您:
Tokenizer=new StreamTokenizer(阅读器);
在main方法中。我希望这是有帮助的,让我知道。
我有一个棘手的问题要解决。我使用系统。方法调用之前和之后的currentTimeMillis(),因为我必须测量这两条语句之间经过的时间。 我担心的是每次运行程序都会得到不同的结果。 我明白了(这很完美): 几秒钟后,我再次运行程序,我得到(这是错误的): 我说这个输出是错误的,因为每辆车的等待时间不应该少于100毫秒。 什么实际影响基于currentTimeMillis函数的时间计算? 为什么我
我是机器人和爪哇的新手。我已经构建了一个计算器,当我输入3个输入时,我需要它来自动显示结果,但我不知道该怎么做。 我将multiply添加到了一个文本视图(通过属性onclick),它可以工作,但我希望它能在textview中自动显示。
我想知道“计数器”和“米”类维护的计数之间是否有区别?我也了解仪表测量速率,但我很好奇,如果同时有一个计数器和一个仪表更新(为计数器递增),我会认为这两个数字是相同的。我这个假设是错的吗?
我目前有一个由两个计算变量组成的变量。我需要将输出的变量显示为包含一千个分隔符的货币。 在本例中,用户输入房间的宽度和长度,然后java计算并告诉用户所需的数量。我将在下面添加我的代码,以帮助了解这是如何工作的。 我们将不胜感激。谢谢 这是计算变量: 您可以在此处查看此页面的完整javascript:https://jsfiddle.net/3yw4m7kj/
我们正计划将Graphql用于编排(For e.用户界面客户端调用图形ql服务,该服务转到多个Restendpoint并返回结果)。这里的问题是,从一个Restendpoint,我们必须根据客户端请求的字段传递不同类型的查询参数。 我们使用Spring Bootgraphql和graphql java工具库来初始化graphql 我的代码解析用户字段并调用restendpoint,以便在一次调用(
本文向大家介绍JavaScript计时器示例分析,包括了JavaScript计时器示例分析的使用技巧和注意事项,需要的朋友参考一下 1.什么是JavaScript计时器? 在JavaScript中,我们可以在设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。 2.计时器类型 一次性计时器:仅在指定的延迟时间之后触发一次。 间隔性触发计时器:每隔一定的时间间隔就触发一次 3.计时器方法 1