这里已经有很多问题了,但我还是会继续。这是一个简单的脑力操翻译。我想出了所有其他符号,但我不知道如何实现循环。有人能帮忙吗?
package com.lang.bfinterpreter;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import com.lang.exceptions.TapeSizeExceededException;
public class Interpreter {
private Interpreter() {
super();
}
private static String getCode(final String inputFile) throws IOException {
String code = "";
// store the entire code
final BufferedReader br = new BufferedReader(new FileReader(inputFile));
for (String line = br.readLine(); line != null; line = br.readLine()) {
code += line;
}
br.close();
return code;
}
public static void interpret(final String inputFile) throws IOException,TapeSizeExceededException,IndexOutOfBoundsException {
// get the program as a string
final String code = getCode(inputFile);
// create the Turing tape (static size)
Character[] tape = new Character[12000];
Integer indexPointer = 0;
for (int i = 0; i != 12000; i++) {
switch (code.toCharArray()[i]) {
case ',':
tape[indexPointer] = (char) System.in.read();
break;
case '.':
System.out.println(tape[indexPointer]);
break;
case '+':
tape[indexPointer]++;
break;
case '-':
tape[indexPointer]--;
break;
case '>':
if (indexPointer == 11999) {
throw new IndexOutOfBoundsException();
}
else {
indexPointer++;
}
break;
case '<':
if (indexPointer == 0) {
throw new IndexOutOfBoundsException();
}
else {
indexPointer--;
}
break;
case '[':
// I have a feeling I'll need stack to store nested loops
break;
case ']':
// I have a feeling I'll need stack to store nested loops
break;
default:
break;
}
}
}
}
我有一种感觉,我需要使用Stack,但我似乎不知道如何使用。我以前构建过表达式计算器。。。这需要同样的逻辑吗?
我想,最具挑战性的部分是找到匹配的括号。找到匹配括号的位置后,只需检查磁带[indexPointer]
的值,然后将i
设置到它后面的位置,这应该很容易做到。
给定code
中索引i
处的一个左括号,要找到与其匹配的右括号,只需转到code
中i
的右侧即可。你从一个堆栈开始,堆栈中只有一个[
——这就是[
在i
上的[
。每当你遇到一个新的[
,你就把它推到堆栈上。每当你遇到]
时,你从堆栈中弹出一个[
——这个]
与你弹出的[
匹配!当你从堆栈中弹出最后一个[
时(即堆栈变空时),你知道你在i
处找到了匹配的左括号。
在代码中,您甚至不需要Stack
。您可以使用int
来编码堆栈中有多少元素-在推送时递增,在弹出时递减。
private static int findMatchingCloseBracketAfterOpenBracket(char[] code, int openBracketIndex) {
// parameter validations omitted
int stack = 1;
for (int i = openBracketIndex + 1; i < code.length ; i++) {
if (code[i] == '[') {
stack++;
} else if (code[i] == ']') {
stack--;
}
if (stack == 0) {
return i;
}
}
return -1; // brackets not balanced!
}
要找到与之匹配的[
,]
,方法是一样的,只不过你要走另一个方向,并反转推送和弹出动作。
private static int findMatchingOpenBracketBeforeCloseBracket(char[] code, int closeBracketIndex) {
// parameter validations omitted
int stack = 1;
for (int i = closeBracketIndex - 1; i >= 0 ; i--) {
if (code[i] == '[') {
stack--;
} else if (code[i] == ']') {
stack++;
}
if (stack == 0) {
return i;
}
}
return -1; // brackets not balanced!
}
(重构这里的代码复制留给读者作为练习)
我有一个数据框的苹果股票价格年初至今如下文件名appl。csv 我想把上面的数据转换成一个动物园时间序列对象,这样我就可以使用时间序列分析的力量。我尝试编写如下代码,但没有得到结果。有人能帮我理解我在下面的代码中犯的错误吗? r给出了以下结果 读取错误。zoo(“appl.csv”,format=“%m-%d-%y”,tz=“”,FUN=NULL,:索引在数据行中有145个错误条目:1234561
本文向大家介绍Python循环实现n的全排列功能,包括了Python循环实现n的全排列功能的使用技巧和注意事项,需要的朋友参考一下 描述: 输入一个大于0的整数n,输出1到n的全排列: 例如: 思路: 代码: 总结 以上所述是小编给大家介绍的Python循环实现n的全排列功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持! 如果你觉
我所知道的是: 注释是在java 5中添加的 注释可以在方法、类和属性中使用 注释可以在运行时、类、源代码中使用(我不知道如何使用类和源代码,以及它们的特性) 当java程序运行时,可以实现带有保留的注释,即运行时注释 我想实现一个注释,具有以下特性: > @MyAnnotation(allowMethods={xxx.doSomething}) public void getValue(){}
我正在创建E4 RCP应用程序,因为我有一个部分。我想为我的部分实现“另存为”功能,因为它是为编辑器实现的(例如:Java文件编辑器)。 要求: 当用户单击我的零件时,应启用“另存为”选项 因此,我的问题是,我应该做什么,我必须实现任何扩展点或任何其他?
但我需要一个解释,因为代码的工作方式与预期的不同。 我想在我的网站上有一个链接,用户可以点击whatsapp链接,开始与联系人的对话。 我添加的代码是这样的: null 这段代码在Android和iPhone上都可以使用,但它不允许我添加自定义联系号码: abid只能是已保存在您手机中的联系人的ID,否则它将打开whatsapp中的联系人选择页面 请不要在没有内容解释的情况下分享链接,因为我不是一
我对C语言编程有点陌生,我觉得用C语言做一个brainfuck解释器是学习这门语言的好方法。我可以用这些bf代码编写和测试: 这应该会打印一个hello world 这和预期的一样,所以我认为我的解释器工作得很好,但是当我用你好世界代码的几个变体进行测试时,奇怪的事情发生了。 这个bf代码也应该打印一个hello world,但它会打印出