0

Hi. I'm in a Java class at harvard, and they gave us this assignment to create a function moveKiloMile(); , which moves an on-screen robot 1000 units. We can declare the function by using a function moveMile(); , which moves the robot 8 units. Below is the code that I wrote. I'm trying to find out how to do the kilomile function without using a loop, since the professor says that its relatively short.

class Mover extends UrRobot
{
	void turnAround()
	{
		turnLeft();
		turnLeft();
	}

	void moveMile()
	{
		move();
		move();
		move();
		move();
		move();
		move();
		move();
		move();
	}

	void moveKiloMile()
	{
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();		
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();		
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();		
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
		moveMile();
	}

	main
		{
			Mover Karel = new Mover (1, 1, East, 0);
			Karel.turnAround();
			Karel.turnAround();			
			moveMile();
			moveKiloMile();
		}
}

To download the program we created this in, visit http://www.fas.harvard.edu/~libs111 and click the "Karal" button on the left column.

Thanks!

Ian

3
Contributors
11
Replies
13
Views
14 Years
Discussion Span
Last Post by Dani
0

Oh my goodness gracious! What I suggest is to possibly use a recursive function, since you can't use a loop. This calls a function multiple times until a condition is met. (You pass the parameters for the condition into the function). Tell me if this works:

void moveKiloMile(int i)
{
     if (i > 0)
     {
          moveMile();
          i--;
          moveKiloMile(i);
      }
}

However, in the main function, you will have to call moveKiloMile(1000) to indicate you want to run moveMile 1000 times. Otherwise, you could do moveKiloMile(5) to run moveMile 5 times, and, well, you get the idea. :D Other than that, it works!

0

Just noticed you wrote this isn't in Java, it's in JKarel. I downloaded the JKarel Users Manual you provided a link to, and it says to do this:

loop(1000)
{
     moveMile();
}

or, alternatively

int i = 0;
while (i < 1000)
{
     moveMile();
     i++;
}

Actually, I would assume if your teacher/professor said not to use a "loop" he was referring to the former and wants you to use "while" instead. However, in real programming, the former refers to a for loop while the later refers to a while loop.

In any case, I'm not sure if you can use the code for the "while" I've provided only because I don't see that JKarel supports variables of any kind - only calling functions.

0

I don't see how someone can tell you to write something efficient without a loop (in this language anyways). Another way to do it besides recursion is to create a label and jump to it if your language supports it. (Kind of like Basic's GOTO.) Jumps are used more in lower level languages like assembly. This seems to be a higher level one, so a jump wouldn't be the best way but it would work.

0

According to what I saw of the how-to, no labels are supported either. Just functions and function calls!

0

According to the how-to, which is basically meant as an "intro to the java language" there is something called loop(x) where x is an integer value, not a variable. Then there is something else called while(condition). When the teachers says don't use a loop, I think he/she means to use a while. According to the how-to, the "while" isn't associated with a "loop". See what I'm saying?

0

Yes, and quite a good one at that, so I hear. And they count "while's" as loops too. Additionally, there aren't any multiplication functions or variables that can be used.

0

I'm not actually looking for code, either. More of just the techique as to how to do it.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.