Java 使用扫描器解析字符串,并将解析后的字符串用作 if else 语句中的输入

Java parse a string using a scanner, and using the parsed string as input in an if else statement

各位程序员大家好!我是 Java 初学者,我需要一些帮助。

我有一个程序,我想使用名为 "rule" 的字符串中的预制指令让海龟移动。我希望将该规则解析为 if-else 语句的可读格式。然后 if-else 语句将读取已解析的 "rule" 中的每个字符,并使 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();

}
}

我认为你有很多代码逻辑问题,你可以用下面的代码改变你的 do while 循环

        boolean done = false;
        String line ;
        while((line = scanner.nextLine()) != null && !done)
        {
            for (int i = 0; i< rule.length(); i++) {
                if(rule.charAt(i) == 'F')
                    m.forward(25);
                else if(rule.charAt(i) == '-')
                    m.turnLeft();
                else if(rule.charAt(i) == '+' )
                    m.turnRight();
                else{
                    done = true; 
                    break; 
                }
            }
        }

我试过那个脚本,它对我有用,它根据命令打印每个动作,所以我认为问题出在你的函数中,我的意思是 (m.forward(), m.turnRight( )...)

public class Main {
public static void main(String[] args)
{
    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";


    int i = 0 ;
    char[] cmds = rule.toCharArray();
    do
    {
        if(cmds[i] == 'F') {
            System.out.println("Foward");
        }
        else if(cmds[i] == '-') {
            System.out.println("Left");
        }
        else if(cmds[i] == '+') {
            System.out.println("Right");
        }
        else // it's surely "Q"
            break ; 
        i++ ;
    }
    while(true);
    System.out.println("Fractal construction terminated.");
    }
}