In der Zeile
bekomme ich eine out of bounce exeption, ich dacht die gibt es nur bei Arrays?
Wie kann ich das lösen?
Der komplette Quellcode:
Java:
if(wort[y]==vergleich[y])
Wie kann ich das lösen?
Der komplette Quellcode:
Java:
public class GRAPH_MATRIX
{
int anzahlKnoten;
Knoten[]knoten;
int[][] matrix;
int breite = 0;
int feldlaenge;
boolean [] besucht;
ZUSATZ zusatz;
public GRAPH_MATRIX(int anzahl)
{
matrix = new int [anzahl][anzahl];
besucht = new boolean [anzahl];
knoten = new Knoten [anzahl];
feldlaenge = anzahl;
zusatz = new ZUSATZ(anzahl);
}
public void KnotenEinfuegen(String name)
{
if(anzahlKnoten<feldlaenge)
{
if(KnotenNummer(name)==-1)
{
knoten[anzahlKnoten] = new Knoten(name);
matrix[anzahlKnoten][anzahlKnoten] = 0;
for(int i=0; i<anzahlKnoten; i++)
{
matrix[anzahlKnoten][i]=0;
matrix[i][anzahlKnoten]=0;
}
String nameKurz = abkürzung(name, anzahlKnoten);
anzahlKnoten = anzahlKnoten +1;
if(breite < nameKurz.length())
{
breite = nameKurz.length();
}
}
else
{
System.out.println(name +" ist bereits vorhanden.");
}
}
}
public void KanteEinfuegen(String von, String nach, int gewichtung)
{
int vonNummer,nachNummer;
vonNummer =KnotenNummer(von);
nachNummer = KnotenNummer(nach);
if(vonNummer !=-1 && nachNummer != -1 && vonNummer != nachNummer)
{
matrix[vonNummer][nachNummer] = gewichtung;
matrix[nachNummer][vonNummer] = gewichtung;
}
}
public int KnotenNummer(String Name)
{
int knotennummer = -1;
for(int i=0; i<anzahlKnoten;i++)
{
if(knoten[i].BezeichnungGeben().equals(Name) && knoten[i]!= null)
{
knotennummer = i;
}
}
return knotennummer;
}
public void Ausgeben()
{
String b ="";
for(int t = 0;t<=breite;t++)
{
b=b+" ";
}
String h = "";
for(int i =0;i<anzahlKnoten;i++)
{
b=b+knoten[i].BezFormatGeben(breite)+" ";
}
System.out.println(b);
String f="";
for(int y=0;y<anzahlKnoten;y++)
{
h=knoten[y].BezFormatGeben(breite)+" ";
for(int g =0;g<anzahlKnoten;g++)
{
String str = Integer.toString(matrix[y][g]);
f=str;
for(int k = str.length();k<=breite;k++)
{
f=f+" ";
}
h=h+f+" ";
f="";
}
System.out.println(h);
h="";
}
}
public void tiefenAusgabe(int startNr, int zielNr, int tiefe)
{
String abstand = " ";
String abstandNeu = "";
for(int i=0; i< breite; i++)
{
abstand = abstand + " ";
}
for(int i=1; i < tiefe;i++)
{
abstandNeu = abstandNeu + abstand;
}
System.out.println(abstandNeu + knoten[startNr].BezeichnungGeben() + "----> " + knoten[zielNr].BezeichnungGeben());
}
public void besuchen(int kntnr)
{
int tiefe = 0;
besucht[kntnr] = true;
System.out.println(knoten[kntnr].BezeichnungGeben());
for(int abzweignr=0; abzweignr<anzahlKnoten; abzweignr++)
{
if(matrix[kntnr][abzweignr]>0 && besucht[abzweignr] == false)
{
tiefe = tiefe +1;
tiefenAusgabe(kntnr,abzweignr,tiefe);
besuchen(abzweignr);
}
}
tiefe = tiefe -1;
System.out.println(knoten[kntnr].BezeichnungGeben() + "(fertig)");
}
public void tiefensuche(String startKnoten)
{
int startnr;
startnr = KnotenNummer(startKnoten);
if(startnr != -1)
{
besuchen(startnr);
Legende();
}
else
{
System.out.println("Knoten ist nicht vorhanden.");
}
}
public void WegeSuche(String StartKnoten, String ZielKnoten)
{ int startNummer = KnotenNummer(StartKnoten);
int zielNummer = KnotenNummer(ZielKnoten);
if(startNummer != -1 && zielNummer != -1 && startNummer != zielNummer)
{
for( int i=0; i<anzahlKnoten; i++)
{
besucht[i] = false;
}
Ablaufen(startNummer, zielNummer, StartKnoten, 0);
}
}
public void Ablaufen(int StartKnotenNr, int ZielKnotenNr, String Pfad, int laenge)
{
int neueLaenge;
String neuerPfad;
besucht[StartKnotenNr] = true;
if(StartKnotenNr == ZielKnotenNr)
{
System.out.println(Pfad+ " ; Länge "+ laenge);
}
else
{
for(int abzweigeNr =0; abzweigeNr<anzahlKnoten;abzweigeNr++)
{
if( matrix[StartKnotenNr][abzweigeNr]>0 && besucht[abzweigeNr] == false)
{
neuerPfad = Pfad + "/"+knoten[abzweigeNr].BezeichnungGeben();
neueLaenge = laenge + matrix[StartKnotenNr][abzweigeNr];
Ablaufen(abzweigeNr, ZielKnotenNr,neuerPfad, neueLaenge);
}
}
}
besucht[StartKnotenNr] = false;
}
public void Legende()
{
String ausgabe = "Ortskürzel: ";
System.out.println("/n__________________________________________________________________________________");
System.out.println("Legende:");
System.out.println("---->: Straße nach" );
for(int i=0; i<anzahlKnoten; i++)
{
if(i%5 ==0)
{
System.out.println(ausgabe);
ausgabe = knoten[i].BezeichnungGeben()+": " + abkürzung(knoten[i].BezeichnungGeben(), anzahlKnoten);
}
else
{
ausgabe = ausgabe + knoten[i].BezeichnungGeben()+": " + abkürzung(knoten[i].BezeichnungGeben(), anzahlKnoten);
}
}
}
public String abkürzung (String name, int anzahl)
{
char[] wort = name.toCharArray();
String nameNeu= "";
boolean gleich;
if(anzahl < 1)
{
nameNeu = nameNeu + wort[0];
return nameNeu;
}
else
{
for(int y = 0; y < name.length(); y++)
{
for(int i=1; i<anzahl;i++)
{
String n = "";
n = n + knoten[i].BezeichnungGeben();
char[] vergleich =n.toCharArray();
if(wort[y]==vergleich[y])
{
gleich = true;
}
}
if(gleich = false)
{
nameNeu = nameNeu + wort[y];
break;
}
else
{
nameNeu = nameNeu + wort[y];
}
}
return nameNeu;
}
}
}