开发类以使用Tester时出错

时间:2018-02-21 00:17:26

标签: java

我提供了一个测试人员(其代码我无法更改),我需要开发一个适用于此测试人员的类。我班上很难过。好像我收到了错误"找不到符号"错误。我似乎错误地构建了我的方法。我是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.");

}
}

2 个答案:

答案 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);
}