【发布时间】:2016-11-16 08:19:54
【问题描述】:
各位程序员大家好!我是 Java 初学者,需要一些帮助。
我有一个程序,我想让 Turtle 使用名为“rule”的字符串中的预制指令移动。我希望将该规则解析为 if-else 语句的可读格式。然后 if-else 语句将读取解析后的“规则”中的每个字符,并使 Turtle 根据每个条件移动。
我的程序遇到了一些问题,它会解析(我认为是这样)并显示规则,但海龟没有移动。我相信这与 if-else 语句有关。请帮忙!
import java.awt.*;
import java.util.Scanner;
class FractalEngine
{
World worldObj = new World();
Turtle m = new Turtle(200, 200, worldObj);
Scanner in = new Scanner(System.in);
FractalEngine()
{
//String rule = "F-F+F+F-FQ";
String rule = "F-F+F+F-F-F-F+F+F-F+F-F+F+F-F+F-F+F+F-F-F-F+F+F-FQ";
//String rule = "F-F+F+F-F-F-F+F+F-F+F-F+F+F-F+F-F+F+F-F-F-F+F+F-F-F-F+F+F-F-F-F+F+F-F+F-F+F+F-F+F-F+F+F-F-F-F+F+F-F+F-F+F+F-F-F-F+F+F-F+F-F+F+F-F+F-F+F+F-F-F-F+F+F-F+F-F+F+F-F-F-F+F+F-F+F-F+F+F-F+F-F+F+F-F-F-F+F+F-F-F-F+F+F-F-F-F+F+F-F+F-F+F+F-F+F-F+F+F-F-F-F+F+F-FQ";
m.setHeading(0);
Scanner scanner = new Scanner(rule);
System.out.println();
System.out.println("Fractal Rule: ");
System.out.println(scanner.nextLine());
System.out.println();
// it prints it to the terminal, but no Turtle movement. Am I using the right parsing method?
do
{
Scanner scanRule = new Scanner(rule);
scanRule.nextLine();
if(rule.equalsIgnoreCase("F"))
m.forward(25);
else if(rule.equals("-"))
m.turnLeft();
else if(rule.equals("+"))
m.turnRight();
else
rule = "Q";
}
while(!rule.equalsIgnoreCase("Q"));
System.out.println("Fractal construction terminated.");
}
}
public class FractalConstructor
{
public static void main(String[] args)
{
FractalEngine fe = new FractalEngine();
}
}
【问题讨论】:
-
请包含您的输出。提示:将
nextLine()的结果赋值给一个变量。而且您可能不想使用Scanner,而是将rule转换为字符数组。 -
你真的不需要使用
Scanner来做你想做的事,除非你以后想从预制字符串以外的其他来源读取。你可以简单地做char[] commands = rule.toCharArray()然后循环遍历数组。
标签: java parsing if-statement java.util.scanner turtle-graphics