【问题标题】:Java parse a string using a scanner, and using the parsed string as input in an if else statementJava 使用扫描器解析字符串,并将解析后的字符串用作 if else 语句中的输入
【发布时间】: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


【解决方案1】:

我认为你有很多代码逻辑问题,你可以用下面的代码改变你的 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; 
                }
            }
        }

【讨论】:

    【解决方案2】:

    我试过那个脚本,它对我有用,它打印每个动作取决于命令,所以我认为问题出在你的函数中,我的意思是 (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.");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多