We're a community of 1076K IT Pros here for help, advice, solutions, professional growth and fun. Join us!
1,075,894 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Start New Discussion Reply to this Discussion

Loop...without the loop

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
3 Hours
Discussion Span
9 Years Ago
Last Updated
12
Views
theQube
Light Poster
35 posts since Feb 2003
Reputation Points: 10
Solved Threads: 3
Skill Endorsements: 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!

Dani
The Queen of DaniWeb
Administrator
21,343 posts since Feb 2002
Reputation Points: 1,555
Solved Threads: 367
Skill Endorsements: 121

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.

Dani
The Queen of DaniWeb
Administrator
21,343 posts since Feb 2002
Reputation Points: 1,555
Solved Threads: 367
Skill Endorsements: 121

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.

samaru
a.k.a inscissor
Team Colleague
1,256 posts since Feb 2002
Reputation Points: 262
Solved Threads: 18
Skill Endorsements: 22

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

Dani
The Queen of DaniWeb
Administrator
21,343 posts since Feb 2002
Reputation Points: 1,555
Solved Threads: 367
Skill Endorsements: 121

Then the teacher is whacked.

samaru
a.k.a inscissor
Team Colleague
1,256 posts since Feb 2002
Reputation Points: 262
Solved Threads: 18
Skill Endorsements: 22

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?

Dani
The Queen of DaniWeb
Administrator
21,343 posts since Feb 2002
Reputation Points: 1,555
Solved Threads: 367
Skill Endorsements: 121

Hi. I'm in a Java class at harvard...

But a while is a loop. This is a Harvard teacher?

samaru
a.k.a inscissor
Team Colleague
1,256 posts since Feb 2002
Reputation Points: 262
Solved Threads: 18
Skill Endorsements: 22

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.

theQube
Light Poster
35 posts since Feb 2003
Reputation Points: 10
Solved Threads: 3
Skill Endorsements: 0

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

theQube
Light Poster
35 posts since Feb 2003
Reputation Points: 10
Solved Threads: 3
Skill Endorsements: 0

Never mind...I got it....

theQube
Light Poster
35 posts since Feb 2003
Reputation Points: 10
Solved Threads: 3
Skill Endorsements: 0

Please enlighten us. We are confounded computer scientists here.

Dani
The Queen of DaniWeb
Administrator
21,343 posts since Feb 2002
Reputation Points: 1,555
Solved Threads: 367
Skill Endorsements: 121

This article has been dead for over three months: Start a new discussion instead

Post: Markdown Syntax: Formatting Help
 
You
 
© 2013 DaniWeb® LLC
Page rendered in 0.0790 seconds using 2.55MB