'void' type not allowed

Status
Nicht offen für weitere Antworten.

M.I.G

Aktives Mitglied
Hallo ich versuche gerade lineare Suche zu programmieren. Folgende habe ich bereits:
Code:
import java.io.*;

public class cRecord implements Serializable
{
  String name;
  String vorname;
  int nummer;

  public cRecord(int pNummer, String pName, String pVorname)
  {
    name = pName;
    vorname = pVorname;
    nummer = pNummer;
  }

  public int getNummer()
  {
    return nummer;
  }

  public void setNummer(int pNummer)
  {
    this.nummer = pNummer;
  }

  public String getName()
  {
    return name;
  }
  
  public void setName(String pName)
  {
    this.name = pName;
  }
  
  public String getVorname()
  {
    return vorname;
  }
  
  public void setVorname(String pVorname)
  {
    this.vorname  = pVorname;
  }
  
  public void zeige()
  {
     System.out.println("Name: "+ name);
     System.out.println("Vorname: "+ vorname );
     System.out.println("Nummer: "+ nummer);
  }
}
Code:
import java.io.*;

public class cRecordArray implements  Serializable
{
  cRecord[] daten;

  public cRecordArray(int pLänge)
  {
    daten = new cRecord[pLänge];
  }

  public void zeige_cRecord()
  {
    for(int lauf = 0; lauf < daten.length; lauf++)
    {
      System.out.println("Index "+ lauf +":");
      daten[lauf].zeige();
      System.out.println();
    }
  }
  
  public void fülle()
  {
    System.out.println();
    
    for (int lauf = 0;lauf < daten.length;lauf++)
    {
      daten[lauf] = new cRecord(0 ,"Name", "Vorname");
      daten[lauf].setNummer(lauf);
    }
    for(int buchstabe1=0; buchstabe1<26; buchstabe1++)
    {
      for(int buchstabe2=0; buchstabe2<26; buchstabe2++)
      {
        daten[buchstabe1*26+buchstabe2].setName( (char)(buchstabe1+65)+""+(char)(buchstabe2+65) );
      }
    }
    for(int buchstabe1=0; buchstabe1<26; buchstabe1++)
    {
      for(int buchstabe2=0; buchstabe2<26; buchstabe2++)
      {
        daten[buchstabe1*26+buchstabe2].setVorname( (char)(buchstabe1+65)+""+(char)(buchstabe2+65) );
      }
    }
  }
  
  public int länge()
  {
    return daten.length;
  }
}
Code:
import java.io.*;

public class cLineareSuche implements  Serializable
{
  cRecord[] daten;
  
  public void suchen(String targetName)
  {
    for(int lauf = 0; lauf<daten.length;lauf++)
    {
      if(this.daten[lauf].getName().equals(targetName))
      System.out.println(this.daten[lauf].zeige());
      else
      {
        if(lauf == daten.length-1)
        System.out.println("Der gesuchte Name existiert nicht.");
      }
    }
  }
}
Aber ich bekomme immer folgende Fehlermeldung:
Code:
cLineareSuche.java:13:48: 'void' type not allowed here
      System.out.println(this.daten[lauf].zeige());
                                                               ^
1 error
Ich hoffe ihr könnt mir helfen danke im voraus.
 

Marco13

Top Contributor

Aber ich bekomme immer folgende Fehlermeldung:

Code:
cLineareSuche.java:13:48: 'void' type not allowed here
      System.out.println(this.daten[lauf].zeige());
                                                               ^
1 error

this.daten[lauf].zeige() liefert "void" zurück. D.h. die Methode liefert NICHT etwa einen String, den man mit System.out. ausgeben könnte, sondern gibt SELBST etwas aus.
System.out.println(this.daten[lauf].zeige());
ersetzen durch
this.daten[lauf].zeige();

Oder in den Daten toString implementieren und
System.out.println(this.daten[lauf]);
aufrufen
 

trazzag

Bekanntes Mitglied
Versuch mal die letzte Klasse wie folgt zu gestalten:

Code:
import java.io.*;

public class cLineareSuche implements  Serializable
{
  cRecord[] daten;
 
  public void suchen(String targetName)
  {
    for(int lauf = 0; lauf<daten.length;lauf++)
    {
      if(this.daten[lauf].getName().equals(targetName))
        this.daten[lauf].zeige();
      else
      {
        if(lauf == daten.length-1)
        System.out.println("Der gesuchte Name existiert nicht.");
      }
    }
  }
}

Also, einfahc das System.out weglassen - die rufst da ja in der Methode auf...
 

M.I.G

Aktives Mitglied
Jetzt hab ich aber ein neues Problem wenn ich in folgendes in die main schreibe:

Code:
public static void main(String[] args)
  {
    cRecordArray adressbuch;
    adressbuch = new cRecordArray(26*26);

    adressbuch.fülle();
    adressbuch.zeige_cRecord();
    adressbuch.suchen("HH");
  }
kriege ich folgende Fehlermeldung:
Code:
cLineareSuche.java:28:15: cannot find symbol
symbol  : method suchen(java.lang.String)
location: class cRecordArray
    adressbuch.suchen("HH");
              ^
1 error
:bahnhof:
 

Tobias

Top Contributor
Jo, adressBuch ist vom Typ cRecordArray und cRecordArray hat nun mal keine Methode suchen. Die ist in cLineareSuche. BTW: Du solltest dir bei Gelegenheit mal die Sun Coding Conventions reinziehen.

mpG
Tobias
 

M.I.G

Aktives Mitglied
Ok ich hab das jetzt vererbt
Code:
import java.io.*;

public class cLineareSuche extends cRecordArray
{
  cRecord[] daten;
  
  public cLineareSuche(int lang)
  {
    super(lang);
  }
  
  public void suchen(String targetName)
  {
    for(int lauf = 0; lauf<daten.length;lauf++)
    {
      if(this.daten[lauf].getName().equals(targetName))
      this.daten[lauf].zeige();
      else
      {
        if(lauf == daten.length-1)
        System.out.println("Der gesuchte Name existiert nicht.");
      }
    }
  }
  public static void main(String[] args)
  {
    cLineareSuche adressbuch;
    adressbuch = new cLineareSuche(26*26);

    adressbuch.fülle();
    adressbuch.zeige_cRecord();
    adressbuch.suchen("HH");
  }
}
, aber jetzt klappt es immer noch nicht reibungslos der Array wird angezeigt aber suchen klappt nicht denn ich krieg immer folgendes ausgegeben:
Code:
.......

Index 673:
Name: ZX
Vorname: ZX
Nummer: 673

Index 674:
Name: ZY
Vorname: ZY
Nummer: 674

Index 675:
Name: ZZ
Vorname: ZZ
Nummer: 675

Exception in thread "main" java.lang.NullPointerException
        at cLineareSuche.suchen(cLineareSuche.java:15)
        at cLineareSuche.main(cLineareSuche.java:33)
Hoffe ihr könnt mir helfen.

@Tobias:
Meinst du weil ich die Klassennamen klein schreibe und die Klammern nich so setze wie in den Sun Coding Conventions, oder ist daran noch mehr auszusetzen, weil die 2 genannten Punkte verlangt unser Lehrer.
 

Tobias

Top Contributor
Mh, das habe ich befürchtet - also das mit dem Lehrer. Nein, dein Code sieht recht vernünftig aus, bis eben auf die Klammern und das c vor jedem Klassennamen.

Zur Vererbung: cLineareSuche benutzt doch nur ein cRecordArray, ist aber selbst keines. Vererbung bedeutet man installiert eine "ist-ein"-Beziehung, während bei dir eine "hat-ein"-Beziehung angebrachter wäre ("Hat-ein"-Beziehungen lassen sich zum Beispiel über Instanzvariablen etablieren).
Oder du verzichtest komplett auf die Klasse cLineareSuche und verschiebst stattdessen die Funktionalität in cRecordArray (die Lösung würde ich bevorzugen, den Klassen, die nur eine Tätigkeit beschreiben, sind meistens creepy).

Zu deinem eigentlichen Problem: Welche ist den Zeile 15? Markier das mal bitte im Code. Am einfachsten wirst du den Fehler mit einem Debugger im Einzelstepmodus finden. Meine Vermutung ist, das dein Array weniger Einträge enthält als Plätze vorhanden sind, so das die Suche irgendwann auf einen nicht-initialisierten Array-Index stößt, von dem du ohne Prüfung die zeige()-Methode aufrufst. Das knallt dann eben.

mpG
Tobias
 

M.I.G

Aktives Mitglied
Das mit dem cLineareSuche velangt leider auch mein Lehrer :(
Ich weiß leider nich was du mit Instanzvariablen etablieren meinst und was ein Debugger ist :bahnhof:
Und Zeile 15 ist gleich Zeile 15 in der Codierung.
 

Tobias

Top Contributor
Ok, mach folgendes:

Code:
import java.io.*;

public class cLineareSuche implements  Serializable
{
  cRecordArray daten; // cLineareSuche _hat ein_ cRecordArray
 
  public void suchen(String targetName)
  {
    for(int lauf = 0; lauf<daten.länge();lauf++)
    {
       // daten ist jetzt kein Array mehr, also müssen wir Methoden zum Zugriff benutzen
      if(this.daten.hole(lauf).getName().equals(targetName)) {
          System.out.println(this.daten.hole(lauf).zeige());
      }
      else
      {
        if(lauf == daten.länge()-1)
        System.out.println("Der gesuchte Name existiert nicht.");
      }
    }
  }
}

In deinem cRecordArray mußt du jetzt noch eine Methode hole(int lauf) einfügen, die dir das cRecord mit der Nummer lauf zurückgibt. Diese Implementierung ist dir zu Übungszwecken überlassen (1 Zeile; mit Kopf und Klammern in eigenen Zeilen 4 Zeilen).

mpG
Tobias

P.S.: Das Problem bei deinem Code ist, das dein Feld daten in cLineareSuche das Feld daten in cRecordArray überdeckt. Die Zugriffe aus cLineareSuche auf dieses Feld bezogen sich also alle auf das leere, uninitialisierte Feld daten in cLineareSuche und nicht, wie du erwartet hat, aus daten in cRecordArray. Verwirrt hast du mich allerdings mit der Ausgabe - die kam nämlich nicht von cLineareSuche sondern von irgendwo anders her ...

P.P.S.: Alle meine Codes sind ungetestet, funktionieren aber zumindest prinzipiell.
 

M.I.G

Aktives Mitglied
Leider klappt suchen() immer noch nicht. :(
Code:
cLineareSuche.java:30:15: cannot find symbol
symbol  : method suchen(java.lang.String)
location: class cRecordArray
    adressbuch.suchen("HH");
              ^
1 error
Und was meinst du eigentlich mit dem was in deiner Klammer steht?
(1 Zeile; mit Kopf und Klammern in eigenen Zeilen 4 Zeilen)
 

Tobias

Top Contributor
Na, die Methode suchen() gehört ja auch immer noch zu cLineareSuche und NICHT zu cRecordArray. Das wolltest du doch so?

Und meine Klammer gibt dir nur die ungefähre Größe der Methode hole(int lauf) an, die du noch schreiben mußt - 1 Zeile nach traditioneller Zählung ohne Methodenkopf etc, 4 Zeilen wenn man deine Coding Conventions und den Methodenkopf berücksichtigt.

Was in meinem obigen Code noch fehlt ist das Initialisieren der Beziehung zwischen cRecordArray und cLineareSuche. Hab ich a) vergessen und b) will ich dir ja nicht den ganzen Spaß rauben ;).

Code:
import java.io.*;

public class cLineareSuche implements  Serializable
{
  cRecordArray daten; // cLineareSuche _hat ein_ cRecordArray

  public cLineareSuche(cRecordArray daten) {
    this.daten = daten; // Beziehung herstellen
  }

  public void suchen(String targetName)
  {
    for(int lauf = 0; lauf<daten.länge();lauf++)
    {
       // daten ist jetzt kein Array mehr, also müssen wir Methoden zum Zugriff benutzen
      if(this.daten.hole(lauf).getName().equals(targetName)) {
          System.out.println(this.daten.hole(lauf).zeige());
      }
      else
      {
        if(lauf == daten.länge()-1)
        System.out.println("Der gesuchte Name existiert nicht.");
      }
    }
  }
}

In der Main dann

Code:
public static void main(String[] args) {
    cRecordArray adressbuch;
    adressbuch = new cLineareSuche(26*26);

    adressbuch.fülle();
    adressbuch.zeige_cRecord();
    
    cLineareSuche s = new cLineareSuche(adressBuch);
    s.suche("HH");

mpG
Tobias
 

M.I.G

Aktives Mitglied
Dann sind da aber immer noch Fehler :(
Code:
cLineareSuche.java:28:18: cannot find symbol
symbol  : constructor cLineareSuche(int)
location: class cLineareSuche
    adressbuch = new cLineareSuche(26*26);
                 ^
cLineareSuche.java:34:6: cannot find symbol
symbol  : method suche(java.lang.String)
location: class cLineareSuche
    s.suche("HH");
     ^
2 errors
 

Tobias

Top Contributor
Ja, das eine muss logischerweise new cRecordArray(26*26); heißen (copy-paste-Fehler) und das andere ist ein Tippfehler, muss halt "suchen" statt "suche" heißen. Das ich dir helfe, heißt übrigens nicht, das du dein (bislang bemerkenswertes) Maß an Eigeninitiative jetzt einstellen darfst (Kein Vorwurf, nur eine Anmerkung, weil dir die beiden Flüchtigkeitsfehler auch selbst hätten auffallen können.).

mpG
Tobias :wink:
 

M.I.G

Aktives Mitglied
Jo sorry liegt wohl daran ,dass ich da schon länger dran sitze und ein bisschen unter Zeitdruck stehe.
Aber tausend dank
 

M.I.G

Aktives Mitglied
Ja aber ich hab noch ein Bug. Weil immer: "der name existiert nicht "angezeigt wird, außer ich suche nach dem letzten Namen.Gibt es ein Befehl mit dem ich die for-Schleife abbreachen kann, weil dann würds funktionieren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Compiler-Fehler void is an invalid type for the variable Java Basics - Anfänger-Themen 5
C Kann mir jemand sagen warum public void unzulässig ist? Java Basics - Anfänger-Themen 2
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
V Methoden printChar Methode mit Rückgabetyp void Java Basics - Anfänger-Themen 26
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
S Methoden - Warum int wenn auch void? Java Basics - Anfänger-Themen 3
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
N Groß- und Kleinschreibung bei Java: void Methode Java Basics - Anfänger-Themen 1
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
bensdt Klasse erweitern um eine Methode "void decrement()" Java Basics - Anfänger-Themen 5
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
MrDramasetter Rückgabetyp Void oder Sting Java Basics - Anfänger-Themen 18
C Void Methode überladen Java Basics - Anfänger-Themen 5
V for-Schleife in einer void Methode Java Basics - Anfänger-Themen 3
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
Tommy Nightmare void Methode gibt Array zurück Java Basics - Anfänger-Themen 3
I Methoden public void paintComponent (Graphics g) Java Basics - Anfänger-Themen 4
shiroX Methoden JUnit-Test einer void-Methode Java Basics - Anfänger-Themen 4
H Variablen Void und der Rückgabewert Java Basics - Anfänger-Themen 6
G Interpreter-Fehler Problem mit void-Methoden Java Basics - Anfänger-Themen 2
Silvascus Void Methode einem Stringparameter im syso-Befehl hinzufügen Java Basics - Anfänger-Themen 3
T Void Java Basics - Anfänger-Themen 32
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
W Klassen Fehler bei public void setLabelText(JLabel label, String text) Java Basics - Anfänger-Themen 11
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
T Java Code Hilfe - public void xxx() Java Basics - Anfänger-Themen 2
T public void - Problem Java Basics - Anfänger-Themen 10
M Methoden void verschachteln Java Basics - Anfänger-Themen 4
B Void Mehoden Testen Java Basics - Anfänger-Themen 13
S Methoden void-Methode: Wieso gibt es eine Rückgabe? Java Basics - Anfänger-Themen 5
R public static void Rückgabe Java Basics - Anfänger-Themen 5
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4
S Static void Methode Java Basics - Anfänger-Themen 12
L Objekte aus einem void in anderen voids verwenden Java Basics - Anfänger-Themen 8
K GUI Button methoden/void Problem Java Basics - Anfänger-Themen 6
S Probleme mit dem rückgabetyp void Java Basics - Anfänger-Themen 8
D Array void Methode erstellen. Java Basics - Anfänger-Themen 12
E Methoden public static void main(String[] args) Java Basics - Anfänger-Themen 9
I Methoden Problem If/Else; Public Void Java Basics - Anfänger-Themen 6
B Geerbte Instanz kann keine void Methode ausführen?! Java Basics - Anfänger-Themen 15
M Fragen zu Methoden (void/return), Übergabe von Parametern Java Basics - Anfänger-Themen 3
S Datentypen float statt void Java Basics - Anfänger-Themen 3
S Static void main <-> componentListener Java Basics - Anfänger-Themen 9
O Probleme mit void java.awt.Component.setBackground(Color c) Java Basics - Anfänger-Themen 2
T Hilfe bei void, int !? Java Basics - Anfänger-Themen 14
U void shift Java Basics - Anfänger-Themen 7
T Geht so was? public void verkaufe (<X implements Produkt& Java Basics - Anfänger-Themen 8
D generische methode <T> void . Java Basics - Anfänger-Themen 9
C public static void main(String[] args) Java Basics - Anfänger-Themen 6
D Frage zu public static void main. Java Basics - Anfänger-Themen 4
K void Methode abbrechen Java Basics - Anfänger-Themen 7
G Vor oder hinter public static void main. ? Java Basics - Anfänger-Themen 8
T rotes herz public void paint(Graphics g) Java Basics - Anfänger-Themen 2
G Was ist public static void main(String[] args)? Java Basics - Anfänger-Themen 12
G <identifier> expected bei public void final Java Basics - Anfänger-Themen 3
H void not allowed? Java Basics - Anfänger-Themen 4
P Void-Aufrufe verursachen IO-Exceptions? Java Basics - Anfänger-Themen 4
T Von Main auf eine Variable in void zugreifen Java Basics - Anfänger-Themen 4
C public void keyPressed(KeyEvent e) Java Basics - Anfänger-Themen 2
N public void und verhalten bei return Java Basics - Anfänger-Themen 2
M public static void main(String... args)<- Was bedeutet das? Java Basics - Anfänger-Themen 5
A die public static void main ? Java Basics - Anfänger-Themen 3
C Java-Anfang main void public? Java Basics - Anfänger-Themen 5
N public static void main(String args[]) Java Basics - Anfänger-Themen 6
G Warum eigentlich static void? Java Basics - Anfänger-Themen 3
T void Methode -> keine Chance Java Basics - Anfänger-Themen 6
F public final void getsignature() | anfänger Java Basics - Anfänger-Themen 7
B Problem mit einer static void Methode Java Basics - Anfänger-Themen 8
P Was genau bedeutet "public static void main(String[] ar Java Basics - Anfänger-Themen 10
R void? static? beide? garnichtst von beiden? Java Basics - Anfänger-Themen 11
B Eine void innerhalb einer anderen void Java Basics - Anfänger-Themen 7
G in void verändern Java Basics - Anfänger-Themen 5
J public static void main? Java Basics - Anfänger-Themen 5
G public static void main(final String[] args) Java Basics - Anfänger-Themen 4
N public static void Java Basics - Anfänger-Themen 18
X Was genau heißt "public static void main(String[] args) Java Basics - Anfänger-Themen 4
B public static void main (String[] args) ??? Java Basics - Anfänger-Themen 2
G getParameter in public static void main Java Basics - Anfänger-Themen 3
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
I No EJB found with interface of type Java Basics - Anfänger-Themen 12
J Scanner cannot be resolved to a type Java Basics - Anfänger-Themen 3
Denix The public type Main must be defined in its own fileJava(16777541) Java Basics - Anfänger-Themen 13
M Umgang mit dem Type "Date" Java Basics - Anfänger-Themen 6
N Fehler "Cannot instantiate the type" Java Basics - Anfänger-Themen 3
nbergmann The type JOptionPane is not accessible. Java Basics - Anfänger-Themen 4
M Type Erasure in Java Java Basics - Anfänger-Themen 12
Vivien Hilfe bei Type Conversion Java Basics - Anfänger-Themen 3
Flo :3 Variablen Type dismatch: cannot convert from string to int Java Basics - Anfänger-Themen 9
P Jackson mapper.readValue mit generischem Type Java Basics - Anfänger-Themen 10
H Methode mit Array als Rückgabe This method must return a result of Type int[] Java Basics - Anfänger-Themen 2
D Klassen undefined for the type 'object' Java Basics - Anfänger-Themen 2
N The method setSaldo(double) in the type Konto is not applicable for the arguments (int, int) Java Basics - Anfänger-Themen 2
F Type safety: A generic array of.. Fehler Java Basics - Anfänger-Themen 3
W The type Long is not visible HashMap Java Basics - Anfänger-Themen 4
J-Gallus Ein Getter bekommt eine anderen Type als er Return soll Java Basics - Anfänger-Themen 9
S Fehler: Editor does not contain a main type Java Basics - Anfänger-Themen 3
G Programm wird nicht ausgeführt: Editor does not contain a main type Java Basics - Anfänger-Themen 10
Syncopated Pandemonium Compiler-Fehler The constructor MP3File(File) refers to the missing type NoMPEGFramesException Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben