Brain not working - Need help on 2 methods ...
 CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com

# Thread: Brain not working - Need help on 2 methods ...

1. Member
Join Date
Apr 2010
Posts
53

## Brain not working - Need help on 2 methods ...

Here is what I am trying to do here. I am trying to write 2 methods, but I can not seem to get that going. This is not my first Java program, but I am definitely a novice -- trying to teach myself with a couple of books...I am stuck, though.

Methods I am trying to write (have written these a few times, but now starting over):

1. Method called squared that uses a “for” loop to calculate and print n2 (n squared).

2. Method called exponential that uses a “for” loop to calculate and print 2n (2 to the Nth power)

This will all be ran through the main method to see which method runs the fastest for n= 1- 20.

Here is my code:

Code:
```public class Timing {
public static void main(String[] args){

long start, end;
double result,difference;

for(int n=1; n<=20; n++){
// Calculate the Time for n^2.
start = System.nanoTime();
// Call method to calculate n^2
squared();
end = System.nanoTime();
difference = (end - start);

}

for(int n=1; n<=20; n++){
// Calculate the Time for 2^n.

start = System.nanoTime();
// Call method to calculate 2^n
exponential();
end = System.nanoTime();
difference = (end - start);

}
}

// Method to calculate n^2
public static void squared(){

}

// Method to calculate 2^n
public static void exponential(){

for(int n = 1; n <= 1; n++){

}
}

}```

2. Elite Member Power Poster
Join Date
May 2006
Location
UK
Posts
4,474

## Re: Brain not working - Need help on 2 methods ...

If you are trying to write a method to calculate the square of a number the method needs to accept the number to square and return the result. For an exponential, your method needs to accept the number to raise to a power and the power to raise it too and again it needs to return the result.

Your code for timing the result doesn't do anything useful:
Firstly every time through the loop you assign a new value to 'difference' and then don't do anything with it. You should at least print out the value.
Secondly unless your computer is steam powered the calculation will be done so quickly you won't get a meaningful time. You need to put a for loop around the method call to call it multiple times (ie 10,000 times - depending on the speed of your system)

3. Member
Join Date
Apr 2010
Posts
53

## Re: Brain not working - Need help on 2 methods ...

I did not explain what I need to do very well. I will put the entire instructions, etc from the book. You see what I already have so far in the original post up above.

Straight from the book:

1. Create a java method called squared that uses a “for” loop to calculate and print n2.

2. Create a java method called exponential that uses a “for” loop to calculate and print 2n

Run each program for n = 1 to 20

Modify the timing.java program located below to use and test your methods at each value.

Graph the results in Excel and compare the running times.

timing.java program from book

Code:
```/**
*** Measures the time of execution in Nanoseconds ***
***/

public class Timing {
public static void main(String[] args){

long start, end;
double result,difference;

for(int n=1; n<=20; n++){
//Calculate the Time for n^2.
start = System.nanoTime();
//Add code to call method to calculate n^2

end = System.nanoTime();
difference = (end - start);

}

for(int n=1; n<=20; n++){
//Calculate the Time for 2^n.

start = System.nanoTime();
//Add code to call method to calculate 2^n
end = System.nanoTime();
difference = (end - start);

}
}

// Add methods to calculate n^2 and 2^n

}```

4. Elite Member Power Poster
Join Date
May 2006
Location
UK
Posts
4,474

## Re: Brain not working - Need help on 2 methods ...

My previous answers still apply. For example if you were writing a method to add two numbers together, the method would have to accept two arguments and return the result ie
Code:
```int add(int num1, int num2)
{
return num1 + num2;
}```

5. Member
Join Date
Apr 2010
Posts
53

## Re: Brain not working - Need help on 2 methods ...

ok, here is hat I have. It is not working, I am not sure where I am going wrong here. This book sucks...not very explanatory.

Code:
```public class Timing {
public static void main(String[] args){

long start, end;
double result,difference;

for(int n=1; n<=20; n++){
// Calculate the Time for n^2.
start = System.nanoTime();
// Call method to calculate n^2
squared(n);
end = System.nanoTime();
difference = (end - start);

}

for(int n=1; n<=20; n++){
// Calculate the Time for 2^n.

start = System.nanoTime();
// Call method to calculate 2^n
exponential(n);
end = System.nanoTime();
difference = (end - start);

}
}

// Method to calculate n^2
public static void squared(int n){
int result;

for(int i = 1; i <= 1; i++){

result = n * n;
System.out.println(result);
}

}

// Method to calculate 2^n
public static void exponential(int n){
int result;

for(int i = 1; i <= 1; i++){

result = Math.pow(2,n);
System.out.println(result);
}
}

}```

6. Member
Join Date
Apr 2007
Posts
442

## Re: Brain not working - Need help on 2 methods ...

You are almost home, what you have left is some faulty logic. Read your code through, you should be able to spot them well enough. Some observations:

1) Your for loops do not make sense. Why do you have for loops inside your calculation methods, that allow only one pass? Rewrite the methods to allow sufficient params, suggest the pow argument for the exponent and the number of iterations for both of them.

2) Why do you assign the difference on each pass of the for loop, and not add? It is by far simpler to move the looping totally inside the calculation methods. In fact, if your aim is simply to test the speed of the methods, why not let them handle the nanotime comparison, and return the resulting long value? Furthermore, both of the loops use same variable, hence the second overwrites the value and the process time of the first method is entirely lost. Use long values there, and two variables.

3) After all is done, you do not do anything with either the result or the difference. How about printing the results?

7. Member
Join Date
Apr 2010
Posts
53

## Re: Brain not working - Need help on 2 methods ...

I will look over the logic again...I think that is mainly where I am missing something.

1) Your for loops do not make sense. Why do you have for loops inside your calculation methods, that allow only one pass? Rewrite the methods to allow sufficient params, suggest the pow argument for the exponent and the number of iterations for both of them.
1) I understand how the for loops operate, but they are supposed to run the loop for n = 1-20 , so it needs to run 20 times total....then the timing statements in the main method calculate the time it took to complete the operation.

2) Why do you assign the difference on each pass of the for loop, and not add? It is by far simpler to move the looping totally inside the calculation methods. In fact, if your aim is simply to test the speed of the methods, why not let them handle the nanotime comparison, and return the resulting long value? Furthermore, both of the loops use same variable, hence the second overwrites the value and the process time of the first method is entirely lost. Use long values there, and two variables.
2) I can't move the looping totally inside the methods. I am supposed to just add the required methods to make the program work correctly, and call them where they are called as of now. I am not supposed to rewrite everything, just add what is missing to make it work, according to the directions.

3) After all is done, you do not do anything with either the result or the difference. How about printing the results?
3) I was waiting to do that until I go the methods correct.

8. Member
Join Date
Apr 2007
Posts
442

## Re: Brain not working - Need help on 2 methods ...

Why in the world would you not be able to refactor your code? Of course you can move the for looping where ever you like. In case you do not want to, at least use long for the difference, have two variable (one for each method), and add the process time value to the correct variable upon each iteration. Do not be hesitant on using the printlines when you feel something is not working, why would you leave yourself blind?

And if you do not want to move the looping inside your calculation methods, least remove the obsolete looping you have there, for loop that is hardcoded to allow just one pass is simply silly.

9. Member
Join Date
Apr 2010
Posts
53

## Re: Brain not working - Need help on 2 methods ...

The book wants me to add to the code what is needed. I could easily write it all differently, but that defeats the purpose of doing what they ask me to do, and the lesson it is supposed to reinforce. I will try to make some changes and come back if it still does not work.

10. Elite Member Power Poster
Join Date
Aug 1999
Location
UK
Posts
10,163

## Re: Brain not working - Need help on 2 methods ...

Originally Posted by CarlMartin10
The book wants me to add to the code what is needed. I could easily write it all differently, but that defeats the purpose of doing what they ask me to do, and the lesson it is supposed to reinforce.
A loop that is hard-coded to only execute once is either a typo (and if this is from a book, it's fairly common to find code bloopers in books) or a deliberate error that you're expected to correct. I don't know which, but either way, you should fix it. As it is, it doesn't loop - it's clearly wrong. Having said that, the loop statement should be removed entirely - given the context, it's clearly unnecessary and potentially confusing.

YMMV.

Question authority; but, raise your hand first...
A. Dershowitz

11. Member
Join Date
Apr 2010
Posts
53

## Re: Brain not working - Need help on 2 methods ...

ok, I am getting close on this...I am just getting 2 errors.

Timing.java:45: class, interface, or enum expected
public static void exponential(int n){
^
Timing.java:47: class, interface, or enum expected
}
^
2 errors

Code:
```public class Timing {
public static void main(String[] args){

long start, end;
double result,difference;

for(int n=1; n<=20; n++){
// Calculate the Time for n^2.
start = System.nanoTime();
// Call method to calculate n^2
squared();
end = System.nanoTime();
difference = (end - start);
System.out.println(squared());
}

for(int n=1; n<=20; n++){
// Calculate the Time for 2^n.

start = System.nanoTime();
// Call method to calculate 2^n
exponential();
end = System.nanoTime();
difference = (end - start);
System.out.println(exponential());
}
}

// Method to calculate n^2
public static void squared(int n){
result = n * n;

}

}

// Method to calculate 2^n
public static void exponential(int n){
Math.pow(2, n);
}

}

}
}```

12. Elite Member Power Poster
Join Date
May 2006
Location
UK
Posts
4,474

## Re: Brain not working - Need help on 2 methods ...

You have too many closing curly braces. Try matching each opening and closing curly brace to find where you have the extra one.

13. Member
Join Date
Apr 2010
Posts
53

## Re: Brain not working - Need help on 2 methods ...

Originally Posted by keang
You have too many closing curly braces. Try matching each opening and closing curly brace to find where you have the extra one.

I fixed that error, and it really got pissed off, lol.

Timing.java:18: squared(int) in Timing cannot be applied to ()
squared();
^
Timing.java:21: squared(int) in Timing cannot be applied to ()
System.out.println(squared());
^
Timing.java:29: exponential(int) in Timing cannot be applied to ()
exponential();
^
Timing.java:32: exponential(int) in Timing cannot be applied to ()
System.out.println(exponential());
^
Timing.java:38: cannot find symbol
symbol : variable result
location: class Timing
result = n * n;
^
5 errors

Code:
```public class Timing {
public static void main(String[] args){

long start, end;
double result,difference;

for(int n=1; n<=20; n++){
// Calculate the Time for n^2.
start = System.nanoTime();
// Call method to calculate n^2
squared();
end = System.nanoTime();
difference = (end - start);
System.out.println(squared());
}

for(int n=1; n<=20; n++){
// Calculate the Time for 2^n.

start = System.nanoTime();
// Call method to calculate 2^n
exponential();
end = System.nanoTime();
difference = (end - start);
System.out.println(exponential());
}
}

// Method to calculate n^2
public static void squared(int n){
result = n * n;

}

// Method to calculate 2^n
public static void exponential(int n){
Math.pow(2, n);
}

}```

14. Member
Join Date
Apr 2007
Posts
442

## Re: Brain not working - Need help on 2 methods ...

Your methods method expect params, you call them without params.

15. Elite Member Power Poster
Join Date
May 2006
Location
UK
Posts
4,474

## Re: Brain not working - Need help on 2 methods ...

I fixed that error, and it really got pissed off, lol.

Timing.java:18: squared(int) in Timing cannot be applied to ()
squared();
^
If you want to learn to program in Java you are going to have to put some effort into learning to debug your own code. The compiler messages tell you what is wrong and where it is wrong. You just need to learn to decipher them and look at your code.

For example:
The message above tells you that line 18 of the Timing class has an error and it even shows you where on line 18 the error occurs (the '^' points to the position on the line above it, which is line 18 from your code). The message tells you you have a method with the same name as the one you are calling but it cannot be called in the way you are trying to call it. A quick look at the actual method and your call on line 18 shows they have a different number of parameters.

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•