2016-11-01 20 views
0

Da dies ein erneuter Angriff auf meine erste Frage ist, werde ich damit beginnen, dass ich ein Java-Neuling bin. Ich versuche auch, diese Woche eine College-Level-Java-Aufgabe zu absolvieren. Um das zu vertuschen, lass mich sagen, dass ich kaum weiß, was ich tue. Die Aufgabe in dieser Woche nach Klärung; dies ist einfach:Zugriff Array-Liste in einer anderen Klasse

Sie benötigen eine aktuelle ClassClient für dieses Projekt zu schreiben, dass:

  1. deklariert und initialisiert Ihre Datenarray
  2. erstellt ein SortingClass Objekt,
  3. druckt die Anordnung von Daten (unsortiert)
  4. sendet das Array in den Konstruktor der SortingClass (der den Inhalt des Arrays sortiert)
  5. druckt dasselbe Array von Daten (jetzt sortiert)

Ab jetzt arbeite ich durch sie Schritt für Schritt eingestellt. Momentan ist der einzige Fehler, den NetBeans mir gibt, dass in meiner zweiten Klasse, überall, wo Array1 verwendet wird, unterstrichen ist, und ich nehme an, es bedeutet, dass sie nicht mit der ersten Klasse verlinken, in der die Array-Liste steht. Meine erste Frage ist, ich verbinde offensichtlich nicht richtig; Was vermisse ich? Ich benutze auch die Auswahl Sortiermethode.

Meine erste Klasse namens ClientClass

public class ClientClass { 

    public static void main(double [] array) { 

     double array1[] = 
     {53.5, 60.3, 96.2, 53.3, 56.4, 52.7, 76.4, 77.5, 71.0, 78.2, 
     65.2, 59.3, 80.5, 92.1, 85.7, 78.7, 66.2, 88.8, 50.2, 73.4}; 

     //Create a SortingClass variable with data gievn in the array 
     SortingClass g = new SortingClass(); 

     // Print array unsorted 
     for (double number : array1) 
     { 
     System.out.println("Number = " + number); 
     } 

     String outPutString = g.toString(); 
     System.out.println(outPutString); 
    } 

} 

und ich habe die zweite Klasse geschrieben

public class SortingClass { 

    // Selection Sort 
    public static void ClientClass (double [] array) 
    { 
     double temp; 
     int max; 

     // Selection Sort Method 
     for (int i = 0; i < array1.length - 1; i ++) 
     { 
      max = indexOfLargestElement (array1, array1.length - i); 

      temp = array1[max]; 
      array1[max] = array1[array1.length - i - 1]; 
      array1[array1.length - i - 1] = temp; 
     } 
    } 

    public static int indexOfLargestElement (double[] array1, int size) 
    { 
     int index = 0; 
     for (int i = 1; i < size; i++) 
     { 
      if (array1[i] > array1[index]) 
       index = i; 
     } 
     return index; 
    } 
} 

Antwort

0

public static void ClientClass (double [] array) {} diese Methode ein Array von Doppel als "Array" als Argument nehmen. Wenn Sie in dieser Methode versuchen, auf "array1" zu verweisen, hat es keine Ahnung, wovon Sie sprechen, da keine solche Variable im Bereich erstellt wurde.

Wenn Sie diese public static void ClientClass (double [] array) {} in diese public static void ClientClass (double [] array1) {} ändern, wird die Methode dann verstehen, dass Sie jedes Mal, wenn Sie "array1" referenzieren, über das Array sprechen, das Sie als Methodenparameter übergeben haben.

+0

Ehrfürchtig, unter Ihrem Vorschlag hat alle Unterstreichungen gelöscht. Jetzt, wenn ich versuche, NetBeans erscheint, ist dies ein Fehlerfenster: Wenn ich das Fehlerfenster schließe, finde ich, dass diese Zeile in meiner ersten Klasse blau hervorgehoben ist: public static void main (double [] Array) {. Was ich glaube, ist, dass, weil ich das double [] Array sage, dass die Klasse versucht, das zu schaffen, aber nichts benutzt es. Ich habe versucht, double [] -Array in double [] array1 zu ändern und erhalte einen Unterstreichungsfehler, der besagt, dass das variable Array 1 bereits in der Methode main definiert ist. –

+0

Das Param der Hauptmethode muss String-Array sein. Wird normalerweise als "String [] args" deklariert. – Heri

+0

@Joseph B Howle Ändern Sie Ihre Hauptmethode, wie Heri beschrieben hat. Fwiw die meisten IDEs generieren ein psvm für Sie mit Code-Generierung. –

1

Ihre erste Problem ist, dass diese

das Array in den Konstruktor der SortingClass sendet (die den Inhalt des Arrays sortiert)

übersetzt: Sie ist nicht statisch mit werden kann überall!

Sie brauchen so etwas wie

public class SortingClass { 
    private final double data[]; 
    public SortingClass(double data[]) { 
    this.data = data; 
    } 
    public void sort() { 
    ... would sort on this.data 

Bedeutung: Sie eine Instanz dieser Klasse erstellen, und Sie passieren eine Referenz zu diesem Array in dieser Klasse.

Als Starter möchten Sie Dinge wie this studieren.

+0

Ich werde das untersuchen. Obwohl ich wünsche, dass, wenn Sie ein Beispiel setzen, dass Sie meine Namenskonvention der Variablen verwenden würden. Da ich neu in all dem bin, würde es dein Beispiel leichter nachvollziehen lassen. –

+0

Sorry, aber das ist keine Programmierschule, wo wir dir die Super-Basics beibringen. Ich habe dir einen Link zum Lernen gegeben. Du solltest das einfach so oft lesen, wie es nötig ist, um das zu verstehen. Oder vielleicht, wenn Sie andere Erklärungen brauchen, versuchen Sie es hier: http://docs.oracle.com/javase/tutorial/java/javaOO/index.html ... aber ernsthaft: erwarten Sie nicht, dass wir schreiben etwas für dich, das schon tausendmal aufgeschrieben wurde! – GhostCat

0

Solange die Methoden in SortingClass statisch bleiben, ist es genug, um es nur aus der Hauptklasse aufzurufen.Es bedarf nicht SortingClass von einem „neuen“ zu instanziiert:

SortingClass.ClientClass(array1); 

BTW1: Gut Namensgebung bewahrt Sie und andere von Kopfschmerzen. Z.B. Methoden ("ClientClass") beginnen zuerst mit einem niedrigeren Buchstaben, und zweitens legt der Name nahe, dass es sich um eine Klasse handelt, aber es ist eine (void) -Methode, die eine Sortierung durchführt. Sie denken besser, dass Methoden Verben sind, während Klassen/Instanzen Substantive sind.

BTW2: Ihre Hauptmethode - wenn Sie dies als Java-Anwendung starten möchten - sollte ein String-Array und kein Doppel-Array nehmen.

+0

Ich lerne mehr und mehr über bessere Benennung, je mehr ich lese. Offensichtlich fehlt mir diese Abteilung. Für Ihren Vorschlag "SortingClass.ClientClass (array1);" Wo platziere ich das? Oder ersetze ich etwas damit? Oh, vergaß zu erwähnen, dass wir ein doppeltes Array verwenden sollen; Annahme wegen dezimaler Werte. –

+0

Sie platzieren es stattdessen die Zeile "SortingClass g = new SortingClass();" (Ersetzen Sie es einfach). Und vergessen Sie nicht, den Parameter "array" in der ClientClass-Methode in "array1" umzubenennen, da J.West bereits auf – Heri

+0

hingewiesen hat. Weitere Untersuchung meines Codes und ich sehe, wo Sie mich bitten, die Änderung vorzunehmen. Wenn ich das eingabe, bekomme ich einen Fehler weiter unten in meiner ersten Klasse in Zeile: String outPutString = g.toString(); wobei das "g" unterstrichen ist. NetBeans-Fehler sagen "Kann Symbol nicht finden" –

0

Danke an alle. Die anfängliche Fehlerfrage wurde gelöst und meine erste Klasse funktioniert. Für meine zweite Klasse (SortingClass) ist es aber nicht und ich glaube, dass ich es komplett neu machen muss. Ich werde jetzt daran arbeiten. Danke noch einmal.

Verwandte Themen