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.");
}
}
各位程序员大家好!我是 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.");
}
}