我正在制作一个分形的程序,用户可以选择分形的颜色。唯一的问题是颜色变量在“if”语句之外不起作用。这是我的代码:( public void fractalEngine
中的问题在于设置笔颜色的位置。这些verifiedChoice
变量在if语句中启动,似乎不会延续到代码的其余部分。)
import java.awt.*;
import java.util.Scanner;
class anotherClass
{
World worldObj = new World();
Turtle m = new Turtle(100, 340, worldObj);
Scanner in = new Scanner(System.in);
public void hello()
{
System.out.println("This program is a fractal engine");
System.out.println("A fractal shape is a geometric shape that represents");
System.out.println("the whole shape, no matter what level of scale");
System.out.println();
System.out.println("Your fractal picture will have three different colors,");
System.out.println("Please pick three of the following:");
System.out.println("RED, GREEN, BLUE, ORANGE, BLACK, YELLOW, MAGENTA, PINK");
System.out.println("NOTE: Type your choices just like they appear.");
System.out.println();
}
public void fractalEngine(int pxLength, String fractalRule)
{
System.out.println("Choice #1 out of 3: ");
String choice1 = in.nextLine();
if(choice1.equals("RED") || choice1.equals("GREEN") || choice1.equals("BLUE") || choice1.equals("ORANGE") || choice1.equals("BLACK") || choice1.equals("YELLOW") || choice1.equals("MAGENTA") || choice1.equals("PINK"))
{
System.out.println("Your first choice has been set to " + choice1);
String verifiedChoice1 = choice1;
}
else
{
System.out.println("That choice is not valid, your first choice will now be red");
String verifiedChoice1 = "RED";
}
System.out.println("Choice #2 out of 3: ");
String choice2 = in.nextLine();
if(choice2.equals("RED") || choice2.equals("GREEN") || choice2.equals("BLUE") || choice2.equals("ORANGE") || choice2.equals("BLACK") || choice2.equals("YELLOW") || choice2.equals("MAGENTA") || choice2.equals("PINK"))
{
System.out.println("Your second choice has been set to " + choice2);
String verifiedChoice2 = choice2;
}
else
{
System.out.println("That choice is not valid, your second choice will now be green");
String verifiedChoice2 = "GREEN";
}
System.out.println("Choice #3 out of 3: ");
String choice3 = in.nextLine();
if(choice3.equals("RED") || choice3.equals("GREEN") || choice3.equals("BLUE") || choice3.equals("ORANGE") || choice3.equals("BLACK") || choice3.equals("YELLOW") || choice3.equals("MAGENTA") || choice3.equals("PINK"))
{
System.out.println("Your thrid choice has been set to " + choice3);
String verifiedChoice3 = choice3;
}
else
{
System.out.println("That choice is not valid, your thrid choice will now be blue");
String verifiedChoice3 = "BLUE";
}
m.setHeading(0);
String subData = "";
m.turn(30);
for(int n = 0; n < fractalRule.length() ; n=n+1)
{
subData = fractalRule.substring(n, n+1);
if(subData.equalsIgnoreCase("F"))
m.forward(pxLength);
else if(subData.equals("+"))
m.turn(120);
else if(subData.equals("-"))
m.turn(300);
else if(subData.equals("1"))
m.setPenColor(verifiedChoice1);
else if(subData.equals("2"))
m.setPenColor(verifiedChoice2);
else if(subData.equals("3"))
m.setPenColor(verifiedChoice3);
else if(subData.equalsIgnoreCase("Q"))
m.hide();
}
}
}
public class complexFractal
{
public static void main(String[] args)
{
int lineLength = 15;
String rule = "1F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F-F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F-F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F2+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F-F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F-F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F3+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F-F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-F+F-F+F-F-F-F+F-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";
anotherClass ac = new anotherClass();
ac.hello();
ac.fractalEngine(lineLength, rule);
}
}
答案 0 :(得分:2)
在public void fractalEngine(int pxLength, String fractalRule)
内,只需在 {
符号后<=>声明局部变量:
public void fractalEngine(int pxLength, String fractalRule) {
String verifiedChoice1 = "";
String verifiedChoice2 = "";
String verifiedChoice3 = "";
//Logic here..
}
这些局部变量仅在方法块里面可见,并且在方法之外无法显示。
请确保删除String
语句中提及的if
字词,并且可以在方法中本地使用。
答案 1 :(得分:2)
这是范围问题。您需要从if子句中提取声明并将其与瞬时分离。您可能需要使用null初始化它以阻止Java抱怨。
例如:
function() {
String verifiedChoice = null;
if {
verifiedChoice = ...
}
}
有些人喜欢使用“”初始化,但是我选择null,因为如果你以后忘记实例化它,那么之后你会得到NPE异常与String对象的交互。
答案 2 :(得分:0)
您也可以这样做:
String input = null;
if((input = in.nextLine()).equals("RED")) {
// do something here
}