#include <stdio.h>
#include <stdlib.h>
#define ST_PARAMETROV 4 //stevilo vhodnih parametrov
#define VEL_SPOMINA 10000 //velikost spomina +-10000
#define VEL_PROGRAMA 10000 //največja velikost programa
#define DOVOLJENIH_UKAZOV 10000 //največje dovoljeno število ukazov
int main() {
// \0 označuje konec programa
char program[VEL_PROGRAMA] = ",.>,<<,->--->+++.<.<.\0";
int programPointer = 0;
char parametri[ST_PARAMETROV] = {20,30,40,50};
int parametriPointer = 0;
unsigned char spomin[VEL_SPOMINA*2] = {0};
int spominPointer = VEL_SPOMINA;
int stOklepajev;
int stOpravljenihUkazov = 0;
while(program[programPointer] != 0 && DOVOLJENIH_UKAZOV > stOpravljenihUkazov){
switch(program[programPointer]){
case '>':
spominPointer ++;
break;
case '<':
spominPointer --;
break;
case '+':
spomin[spominPointer] ++;
break;
case '-':
spomin[spominPointer] --;
break;
case '.':
printf("%i\n",spomin[spominPointer]);
break;
case ',':
//če je zmanka parametrov zapiše 0
if(parametriPointer > ST_PARAMETROV-1)spomin[spominPointer] = 0;
else spomin[spominPointer] = parametri[parametriPointer++];
break;
case '[':
if(spomin[spominPointer] == 0){
stOklepajev = 1;
while(stOklepajev != 0){
programPointer ++;
if(program[programPointer] == ']'){
stOklepajev--;
}
if(program[programPointer] == '['){
stOklepajev++;
}
}
}
break;
case ']':
if(spomin[spominPointer] != 0){
stOklepajev = 1;
while(stOklepajev != 0){
programPointer--;
if(program[programPointer] == '['){
stOklepajev--;
}
if(program[programPointer] == ']'){
stOklepajev++;
}
}
}
break;
}
programPointer ++;
stOpravljenihUkazov++;
}
return 0;
}
嗨,任何人都可以帮助我,我在将这些代码从C语言转换为Java语言时遇到了一些困难,任何能够毫无问题地轻松完成此任务的人都可以。我已经尝试过将它从Java转换为Java,但每次都会因为很多错误而失败。 如果有人可以将代码转换为Java,我会非常感激,然后我会自己更正错误。
代码本身是一个Brainfuck解释器。 感谢
答案 0 :(得分:0)
你的#defines
可能必须是const char。
您的case
个开关必须转换为
if
else if
else if
...
else
之后它应该相当简单。
答案 1 :(得分:0)
需要的转换仅限于类和对象定义/初始化以及return
:
public class Brainfuck
{
final static int
ST_PARAMETROV = 4, //stevilo vhodnih parametrov
VEL_SPOMINA = 10000, //velikost spomina +-10000
VEL_PROGRAMA = 10000, //najve?ja velikost programa
DOVOLJENIH_UKAZOV = 10000; //najve?je dovoljeno ?tevilo ukazov
public static void main(String[] argv)
{
// \0 ozna?uje konec programa
char program[] = new char[VEL_PROGRAMA];
char initialProgram[] = ",.>,<<,->--->+++.<.<.\0".toCharArray();
System.arraycopy(initialProgram, 0, program, 0, initialProgram.length);
int programPointer = 0;
char parametri[] = {20, 30, 40, 50};
int parametriPointer = 0;
char spomin[] = new char[VEL_SPOMINA*2];
int spominPointer = VEL_SPOMINA;
int stOklepajev;
int stOpravljenihUkazov = 0;
while (program[programPointer] != 0
&& DOVOLJENIH_UKAZOV > stOpravljenihUkazov)
{
switch (program[programPointer])
{
case '>':
spominPointer++;
break;
case '<':
spominPointer--;
break;
case '+':
spomin[spominPointer]++;
break;
case '-':
spomin[spominPointer]--;
break;
case '.':
System.out.println((int)spomin[spominPointer]);
break;
case ',':
//?e je zmanka parametrov zapi?e 0
if (parametriPointer > ST_PARAMETROV-1)
spomin[spominPointer] = 0;
else spomin[spominPointer] = parametri[parametriPointer++];
break;
case '[':
if (spomin[spominPointer] == 0)
{
stOklepajev = 1;
while (stOklepajev != 0)
{
programPointer++;
if(program[programPointer] == ']') stOklepajev--;
if(program[programPointer] == '[') stOklepajev++;
}
}
break;
case ']':
if(spomin[spominPointer] != 0)
{
stOklepajev = 1;
while(stOklepajev != 0)
{
programPointer--;
if(program[programPointer] == '[') stOklepajev--;
if(program[programPointer] == ']') stOklepajev++;
}
}
break;
}
programPointer++;
stOpravljenihUkazov++;
}
System.exit(0);
}
}