Ik heb een probleem met het aanroepen van een methode die zich in een andere klasse bevindt. Deze main
methode zit in een klasse op zich genaamd Lab14
, en de heapSort()
methode zit in een andere klasse genaamd heapSort
. Beide klassen zitten in het standaardpakket. Ik krijg de foutmelding “De methode heapSort(Vector) is niet gedefinieerd voor het type Lab14” en ik begrijp niet waarom, help alstublieft.
Hieronder staat de hoofdmethode in de klas van lab 14
public static void main(String args[]) {
Heap myheap = new Heap();
Vector<StudentGPA> vec = new Vector();
int [] br = new int[20];
double [] dr = new double[20];
int i = 0;
int j = 0;
try {
//String inputLine; //stores each line from the file
Scanner scanLine;
Scanner input = new Scanner(new File("students.in"));
while (input.hasNextLine()){
scanLine = new Scanner(input.nextLine());
int id = scanLine.nextInt();
//br[i] = id;
String name = scanLine.next();
double gpa = scanLine.nextDouble();
//dr[i]= gpa;
//myStr.add(name);
if(scanLine.hasNext())
{
String advisor = scanLine.next();
GraduateStudentGPA grad = new GraduateStudentGPA(id,name,gpa,advisor);
vec.add(grad);
}
else
{
StudentGPA reg = new StudentGPA(id,name,gpa);
vec.add(reg);
}
i++;
j++;
}
input.close();
}
catch (IOException e) {
System.out.println("IOException in reading input file!!!"+e);
}
heapSort(vec);
}
Hieronder staat de code voor de HeapSort-klasse
public class HeapSort <E extends Comparable<? super E>>{
/** sorts the input vector using heap Sort <ul> <li> iterates
* through each element of the input vector and inserts each
* element to the heap by calling {\tt heapInsert}. <li> deletes
* each of the inserted items by calling {\tt heapDelete} the
* appropriate number of times, and fills up the vector with the
* returned elements. </ul> If you are using the
* minheap implementation, this insertion and deletion of all
* items will produce a list of items sorted by their key
* attribute values.
* @param vec input vector
*/
public void heapSort(Vector<StudentGPA> vec){
// -- TO COMPLETE --
Heap myheap = new Heap<E>();
for(int i = 0; i <vec.size(); i++)
{
myheap.heapInsert(vec.elementAt(i));
}
for(int i = 0; i <vec.size(); i++)
{
vec.setElementAt((StudentGPA) myheap.heapDelete(), i);
}
}
}
Antwoord 1
U gaf het antwoord:
je probeert de heapSort
methode aan te roepen vanuit de Lab14
klasse, maar de heapSort
methode is gedefinieerd op een andere klasse. De compilatiefout moet op deze regel staan.-
heapSort(vec);
U moet een HeapSort-object instantiëren en vervolgens de methode heapSort
als volgt aanroepen.-
HeapSort myHeapSortObject = new HeapSort();
myHeapSortObject.heapSort(vec);
Antwoord 2
Uw heapsort-methode kan statisch worden verklaard, tenminste in de huidige staat
public static <E extends Comparable<? super E>> void heapSort(Vector<StudentGPA> vec) {
Je kunt het dan als volgt openen in je hoofdmethode
HeapSort.heapSort(vec);
Antwoord 3
Je moet ofwel:
1) maak de heapSort-methode openbaar statisch… en roep deze op als HeapSort.heapSort(vec)
of
2) Roep de methode op als nieuw HeapSort().heapSort(vec)
Antwoord 4
Je hebt hier verschillende problemen.
- Je roept
heapSort(vec);
aan vanuit de statischemain
van klasseLab14
. Dit zou betekenen dat de compiler een methode verwacht die overeenkomt met de handtekeningstatic void heapSort(Vector<StudentGPA> vec)
binnen de klasseLab14
. Aan jou hoe je dat oplost. - Wijzig
Vector<StudentGPA> vec = new Vector();
inVector<StudentGPA> vec = new Vector<>();
. Merk op dat toevoeging van de hoekige haken<>
. - Er zijn eigenlijk nog veel meer problemen, mogelijk omdat het nog een onvoltooid werk is. Waarschijnlijk moet ik me concentreren op je oorspronkelijke vraag, waarvoor 1./ het antwoord is.