lineare Suche

Status
Nicht offen für weitere Antworten.

M.I.G

Aktives Mitglied
Hallo ich hab da ein kleines Problem.
Ich versuche ein Programm zu schreiben das einen String in einem Array sucht.
Folgendes habe ich bereits:

Code:
public class cSuchen
{
  private String[] daten;
  
  String name;
  String nummer;
  String help;

  cSuchen( String name, String nummer )
  {
    this.name = name;
    this.nummer = nummer;
  }
  
  public cSuchen(int pLänge)
  {
    daten = new String[pLänge];
  }

  public int länge()
  {
    return daten.length;
  }
}

Code:
class cLineareSuche extends cSuchen
{
  public cLineareSuche(int lang)
  {
    super(lang);
  }

  public void suchen(String targetName)
  {
    for (int lauf = 0; lauf< this.länge(); lauf++)
    {
      if (this[lauf].name.equals(targetName))  //hier ist der fehler
      System.out.println(this[lauf].name);
    }
  }
}

Nur weiß ich nich, wie Ich es(,an der gekenzeichneten Stelle) schaffe den targetNamen mit dem Namen an der mit lauf angegebenen Stelle zu vergleichen.
Das gleiche Problem ergibt sich (in der darunterliegenden Zeile), wenn ich den Namen anzeigen lassen will.
Es erscheint immer folgende Fehlermeldung

Code:
Compiliere C:\Dokumente und Einstellungen\Dagmar\Eigene Dateien\marvin\Marvins Programme\Unterricht\cLineareSuche.java mit Java-Compiler
cLineareSuche.java:12:15: array required, but cLineareSuche found
      if (this[lauf].name.equals(targetName))
              ^
cLineareSuche.java:13:30: array required, but cLineareSuche found
      System.out.println(this[lauf].name);
                             ^
2 errors
vielen dank im voraus.
 
es muss heißen

if (this.daten[lauf].equals(targetName))

aber daten ist private, darauf kannst du bisher nicht zugreifen,
mache entweder daten protected
oder stelle getter zur Verfügung, wie du es mit länge() schon gemacht hast:

if (this.getDaten()[lauf].equals(targetName))
oder
if (this.getDatenAt(lauf).equals(targetName))
 
Ok danke, bis dahin klappt es jetzt, aber wie kann ich die Array jetzt füllen?
Folgendes klappt nicht:
Code:
class TestSuchen
{
  public static void main (String[] args)
  {
    cLineareSuche[] s;
    s = new cLineareSuche[4];

    s[0]= new cLineareSuche("AA","1");
    s[1]= new cLineareSuche("AB","2");
    s[2]= new cLineareSuche("AC","3");
    s[3]= new cLineareSuche("AD","4");


  }
}
Code:
TestSuchen.java:8:11: cannot find symbol
symbol  : constructor cLineareSuche(java.lang.String,java.lang.String)
location: class cLineareSuche
    s[0]= new cLineareSuche("AA","1");
          ^
TestSuchen.java:9:11: cannot find symbol
symbol  : constructor cLineareSuche(java.lang.String,java.lang.String)
location: class cLineareSuche
    s[1]= new cLineareSuche("AB","2");
          ^
usw.
 
Nun, zum einen gibt es in cLineareSuche keinen Konstruktor mit 2 Strings als Parameter, zum anderen hast du in cSuchen nur ein eindimensionales String-Array. Wenn du 2 Strings speichern möchtest brauchst du entweder ein zweidimensionales String-Array oder ein Array eines selbstdefinierten Typs, der ein String-Tupel hält. Empfehlenswerter halte ich allerding ein Object-Array, um keine Einschränkungen hinsichtlich des Typs zuzulassen. Wenn du darin einen selbstdefinierten Datentyp speichern möchtest, musst du in diesem die Methoden equals und hashCode überschreiben.

Die Klasse CSuchen (Klassennamen immer groß am Anfang) benötigt eine Methode zum hinzufügen von Elementen:

Code:
public class CSuchen {
    Object[] daten;
	int count = 0;

	public cSuchen(int size) {
		daten = new Object[size];
	}

	public void add(Object o) {
		daten[count] = o;
		count++;
	}
    ...
}
 
Sorry, aber jetzt komm ich gar nicht mehr klar.
Die Klasse CSuchen hab ich jetzt um die Methode add erweitert, aber wie krieg ich das denn jetzt hin, dass ich dem
Array die Attribute hinzufüge?
 
cLineareSuche -Objekt anlegen mit der richtigen Länge


und dann
suchObjekt.add("AA");
 
cLineareSuche - ein c vor eine Klasse schreiben... ich hasse es wenn Lehrer so einen schmarrn verlangen!
 
Code:
final static char[] buffer = new char[2];
// ....
buffer[0] = 'a';
buffer[1] = 'b';
String s = new String(buffer);

naja, oder einfacher
Code:
String s = 'a' + "" + 'b';
erzeugt zwischendrin aber nen unnötiges string objekt.

man könnte auch so machen
Code:
final static StringBuilder buffer = new StringBuilder();
// ...
buffer.setLength( 0 );
String s = buffer.append( 'a' ).append( 'b' ).toString();

gibt noch diverse andere methoden, such dir eine aus 😉
 
Gibt es da keine einfache Methode wie zum Beispiel:
StringBeispiel.toLowerCase()
Ich mein ich hab da mal irgendwas gesehen was so ähnlich aussah.
charBeispiel1.(???)(charBeispiel2) oder so ähnlich
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben