我提供了一个测试人员(其代码我无法更改),我需要开发一个适用于此测试人员的类。我班上很难过。好像我收到了错误"找不到符号"错误。我似乎错误地构建了我的方法。我是Java和编程的新手,非常感谢任何帮助。这是我理解面向对象编程的第一步。
这是班级:
package something;
import java.util.Random;
public class Drunkard
{
//field declaration
public int startAvenue;
public int Startstreet;
public Random r = new Random();
//constructors to initialize the instance variables
public Drunkard(int avenue, int street)
{
startAvenue = avenue;
startStreet = street;
}
//step method
public void step()
{
int nextMove = rand.nextInt(3);
if(nextMove == 0)
{
moveAhead();
}
else if (nextMove == 1)
{
moveUturn();
}
else if (nextMove == 2)
{
moveLeft();
}
else
{
moveRight();
}
}
//String get location method
public String getLocation()
{
int startAvenue = parseInt("avenue");
int startStreet = parseInt("street");
printf("Location: " + avenue + "," + street);
}
//fastForward method
public void fastForward(int steps)
{
for(int i = 0; i < steps.length; i++)
{
step();
}
}
//howFar method
public int howFar()
{
int distance = Math.abs(startAvenue - avenue) + Math.abs(startStreet -street);
}
} //end class
以下是无法更改的测试人员类:
import something.Drunkard;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter the starting avenue integer: ");
int avenue = input.nextInt();
System.out.println("Please enter the starting street integer: ");
int street = input.nextInt();
// make the Drunkard with initial position
Drunkard ozzy = new Drunkard(avenue, street);
// have him move 100 intersections
ozzy.fastForward(100);
// get his current location
String location = ozzy.getLocation();
// get distance from start
int distance = ozzy.howFar();
System.out.println("Current location: " + location);
System.out.println("That's " + distance + " blocks from start.");
}
}
答案 0 :(得分:0)
请注意以下代码段:
public class Drunkard
{
//field declaration
public int startAvenue;
public int Startstreet;
public Random r = new Random();
//constructors to initialize the instance variables
public Drunkard(int avenue, int street)
{
startAvenue = avenue;
startStreet = street;
}
...
}
您在顶部附近声明了一个字段public int Startstreet;
,但在您的构造函数中,您指定了startStreet = street;
。您在每个语句中大写不同的字母,这就解释了为什么Java无法找到符号startStreet
。
我只是快速一眼就找到了。
答案 1 :(得分:0)
这里的第一个问题是Startstreet和startStreet没有拼写相同。
此外,您将随机对象定义为r,这不是一个使用单个字母然后在步骤方法中使用rand的好习惯,因此这些也不匹配。
public int startAvenue;
public int Startstreet;
public Random r = new Random();
//constructors to initialize the instance variables
public Drunkard(int avenue, int street)
{
startAvenue = avenue;
startStreet = street;
}
接下来,rand.nextInt(3)将选择一个介于0和小于3之间的随机数,因此为0,1或2,因此最终的else块将永远不会运行。
将其更改为rand.nextInt(4),以便else块实际上有机会运行。 我假设你还没有使用方法MoveAhead(),MoveUTurn(),MoveLeft()和MoveRight(),因为它们不在代码中,所以我不会评论那些。
如果你想要查看但不需要,那么switch语句会更清晰,而不是你当前的语句。
//step method
public void step()
{
int nextMove = rand.nextInt(3);
if(nextMove == 0)
{
moveAhead();
}
else if (nextMove == 1)
{
moveUturn();
}
else if (nextMove == 2)
{
moveLeft();
}
else
{
moveRight();
}
}
此方法应返回一个字符串,startAvenue和startStreet已经是构造函数中定义的全局值。 (printf在这里也被滥用了) 您可以删除所有3行,只需输入
即可return(“Location:”+ startAvenue +“,”+ startStreet);
public String getLocation()
{
int startAvenue = parseInt("avenue");
int startStreet = parseInt("street");
printf("Location: " + avenue + "," + street);
}
变量步长是整数,整数没有长度。您希望它运行刚刚输入的步数,因此请删除for循环中的.length。
public void fastForward(int steps)
{
for(int i = 0; i < steps.length; i++)
{
step();
}
}
同样,你的方法应该返回一个整数,你在任何地方都没有return语句。另外我假设距离会要求直接距离所以使用公式a ^ 2 + b ^ 2 = c ^ 2我会写
public double howFar() {
return Math.sqrt( (Math.pow(startAvenue - avenue,2)) + (Math.pow(startAvenue - avenue,2)) );
}
而不是
public int howFar()
{
int distance = Math.abs(startAvenue - avenue) + Math.abs(startStreet -street);
}