This week's giveaway is in the Android forum.
We're giving away four copies of Android Security Essentials Live Lessons and have Godfrey Nolan on-line!
See this thread for details.
The moose likes Beginning Java and the fly likes Calling a method in one class from a method from another class Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Calling a method in one class from a method from another class" Watch "Calling a method in one class from a method from another class" New topic
Author

Calling a method in one class from a method from another class

Maureen Charlton
Ranch Hand

Joined: Oct 04, 2004
Posts: 218
Can anyone tell me what is wrong with this code for calling a method from one class which is in another method and class.

The following code is in a method called StoreStudent which is in a Class called Storage.

The method I am calling i.e. HashIndex( ) is in a class called Student.

When I run the program I get the following error message:
C:\java>javac Storage.java
Storage.java:102: cannot resolve symbol
symbol : method HashIndex ()
location: class java.lang.String[]
int Hash = Student.HashIndex( ) ;

I don't understand when I have stated that I want to call Student.HashIndex( )

Please can anyone help or point me into a place where I can investigate further.
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24183
    
  34

Hi Maureen,

The error message seems to indicate that there's a variable "Student" of type "String[]" (array of String) and that's what the compiler is calling the method on. To call the method you're interested in, you need an actual instance of class Student -- an object created using "new Student" (unless this is a static method.)

This is one of many reasons why it pays to follow the standard Java convention of naming ClassesLikeThis and variablesLikeThis -- i.e., upper case names for classes, and lower-case names for variables and methods. Makes understanding code at a glace easier.


[Jess in Action][AskingGoodQuestions]
Maureen Charlton
Ranch Hand

Joined: Oct 04, 2004
Posts: 218
Ernest,
Many thanks for your reply.

I have now ensured my code conforms. Thanks for noting this. I was unaware of this.

My code is now as follows:

I have a class called Student. Within the Student class I have a method called hashIndex.

I have a class called Storage. Within the Storage class I have a method called StoreStudent.


The error message I get is:
C:\java>javac Storage.java
Storage.java:105: ']' expected
newStudent studentDetail [hash] = Student.studentName;
//Put the Student object in the array as HashIndex
Why, Oh Why - is this occuring? Many times I have stored things in arrays. Is it to do with the fact that I am calling a method from one class to a method in another class? But if it is, surely the line of code to put the Student object in the array as HashIndex is within the same class!

Thanking you in anticipation.

Kind regards
Maureen
Layne Lund
Ranch Hand

Joined: Dec 06, 2001
Posts: 3061
Look at the offending line of code:

The problem is that the compiler thinks you are trying to declare an array here, but this is the wrong syntax. Specifically, you are not allowed to have anything between [ and ] in the declaration.

By looking at your other code, I think you are trying to assign an element to an array that should have been declared somewhere else. There are a couple of places you need to make changes in order to fix this. Looking at your constructor, I see another array declaration:


However, this array is not the same as the array you declared later. In order to share this array variable, you should declare it as a class member, i.e. outside of any method. In otherwords, you can change your code to look something like this:

Notice that I changed the variable declarations to private. This is a common practice because you usually don't want to allow other classes to arbitrarily change these values; they should only be set in a controlled way by calling methods on objects of this class.

Also notice that I eliminated the keyword "static" on the declarations. This allows you to create multiple Storage objects that each have their own array of students. Keeping the "static" keyword means that the variable is shared by all instances of the class.

Finally, there are still problems with the storeStudent() method. However, I don't know exactly how to help you fix them without seeing your Student class. Besides, I'd like you to make the above changes to your code so you can see next set of compiler errors. Figuring out what these errors mean is a valuable skill.

I hope this helps. Please let us know if you have any more problems.

Keep coding!

Layne
[ October 19, 2004: Message edited by: Layne Lund ]

Java API Documentation
The Java Tutorial
Maureen Charlton
Ranch Hand

Joined: Oct 04, 2004
Posts: 218
Layne,

Sorry for the delay in posting this thread (as suggested in my email). I had difficulty getting on to JavaRanch Bigg Moose Saloon.

As my program was rather long to post here, I emailed it to you.

The error message I am now getting is detailed below:
ERROR MESSAGE:
C:\java>javac StorageTest.java
StorageTest.java:128: hashIndex(java.lang.String,int) in Student cannot be appli
ed to ()
hash = Student.hashIndex( );

^
StorageTest.java:130: upperCase(java.lang.String) in Student cannot be applied t
o ()
students [hash] = Student.upperCase( );
^
2 errors

My understanding is I'm getting this error message because the variable are not of the same type?
If this is the case the method hashIndex in the Student file i.e. Student.hashIndex
returns an int variable. So I guess this can't be the case?

Please forgive me if I am looking an idiot, this is the first time I am using methods declaired in other
classes and I am experiencing difficulty with getting my head around it all.

Eventually I want to store each class in it's own file and call it from differnt files. Do you know where I can find examples of this as all the examples I have are contained within one file. The methods used are all in the same class too.
Maureen Charlton
Ranch Hand

Joined: Oct 04, 2004
Posts: 218
Hi,

My main program storagetest.java is testing the class Storage.



I have a class called Student that has a number of methods. The methods with there signatures are as follows:


This code returns String studentName


This code returns int Total which is the ASCii value of the student Name in upperCase



This code returns the hashIndex for the studentName in upperCase

I tested all the methods and the printout was fine.

I then went on to the storage class - as detailed below and I am having BIG time difficulty calling the class Student methods.

Thanking you again for your help.
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24183
    
  34

The several error messages you show in a previous post are two different instances of the same thing: you've written a function that expects arguments, and then you're trying to call it without passing any. A valid call to (for example) your Student.hashIndex method would have to look like

Maureen Charlton
Ranch Hand

Joined: Oct 04, 2004
Posts: 218
Hello,

Could you confirm why you used double quotes in the code above?

Is it not correct just to use the variable name of the student class i.e. the varible name that is going into the method of the class?
Nigel Browne
Ranch Hand

Joined: May 15, 2001
Posts: 673
The reason for the double quotes is that you ask for a String as the first argument to the method

 
jQuery in Action, 2nd edition
 
subject: Calling a method in one class from a method from another class
 
Similar Threads
Hashing Index
Calling a method
Arrays: Calling input from other methods and classes
hashing problem
calling a method