Methodenproblem

Status
Nicht offen für weitere Antworten.

Spin

Top Contributor
Code:
public class Methodenuebung {
    
    
  private int[] array = null;
  
  Methodenuebung()
  {
      array = new int[1];
  }

  // vergrößern des Arrays um anzahlElemente
  void expand (int anzahlElemente)
  {
      // größeres Array anlegen
      int[] array2 = new int[array.length + anzahlElemente];
      int größe = array2.length;
      // bestehendes array umkopieren
      for(int i=0 ; i<größe ; i++)
      {
          array2[i] = array[i];
      }
      array = array2;
       }
  
int max()
{
    int max = array[0];
    for(int i =0;i<array.length;i++)
    { 
// ist ein Element größer als das vorliegende Maximum, so wird sein Wert zu neuen Maximum
        if(array[i] >max)
            max = array[i];
    }
    return max;
}

int min()
{
    int min = array[0];
    for(int i=0;i<array.length;i++)
    {if(array[i]<min)
         min = array[i];
    }
    return min;
}

void put( int index, int neuerWert)
{
    /* liegt die Position an der ein neuer Wert geschrieben werden soll, außerhalb der Dimensionn
       , dann muss dass array vergrößert werden*/
    if(array.length<= index)
    { expand(index - (array.length +1));}
    array[index] = neuerWert;
    
}

int get(int index)
{
    if(array.length>index)
        return array[index];
    // Fehler der angegebene Index ist zu groß
    else
        return -1;
}

void swap(int index1, int index2)
{
    // tascht Inhalte von Array Elemente
    int tausch = array[index1];
    array[index1] = array[index2];
    array[index2] = tausch;
}
        
float average()
{
    // es muss gecastet werden
        float average =(float) 0.0;
        
        for(int i=0;i<array.length;i++)
        {
            average += array[i];
        }
        average = average / array.length;
        return average;
}

void sort()
{
    int obergrenze = array.length;
    
    while(obergrenze >1)
    {
        for( int lauf = 1; lauf < obergrenze; lauf++)
        {
            if(array[lauf] < array[lauf-1])
                    swap(lauf,lauf-1);
        }
        obergrenze--;
    }
}
/* Anmerkung:
 * Die Obergrenze ist zu Beginn gleich der Dimension des Arrays.
 * Dann : Gehe in einer Schleife vom 2. bis zum letzten sotierenden Feldelement.
 * Wenn denn das eine Element kleiner als das andere ist , werden beide vertauscht
 * Obergrenze wird nun um 1 verringert.*/

void print()
{
    System.out.println("Ausgabe des Array");
    for( int i=0; i<array.length;i++)
    {
        System.out.println('\t' + "Index" + i + "Wert: ");
        System.out.println(array[i]);
    }
}







  
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
        int [] array = {4,19,20,7,36,18,1,5};
        
        Methodenuebung Array = new Methodenuebung();
        for(int i=0;i<array.length;i++)
            Array.put(i, array[i]);
        
        Array.print();
        System.out.println("Minimum " + Array.min());
        System.out.println("Maximum " + Array.max());

        System.out.println("Average" + Array.average());

        Array.sort();
        Array.print();
        // TODO code application logic here
    }

}



Hallo Leute , ich habe mich mal ein wenig ausgetobt mit Methoden. Doch wieso geht das nicht ...er zeigt mir fehler.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Methodenuebung.put(Methodenuebung.java:62)
at Methodenuebung.main(Methodenuebung.java:142)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)




kann das sein das ich mit try und catch das ganze behandeln muss ?
 
S

SlaterB

Gast
Array hat Länge 1, Index 0 funktioniert

Array hat Länge 1, Index 1
->
> if(array.length<= index)
schlägt nicht an, Array wird nicht vergrößert, Index 1-Zugriff auf Array der Länge 1 führt zu katastrophalen Programmende,

so können Atomkraftwerke explodieren ;)

edit: ach ne, müsste ja doch? muss selber genauer schauen ;)
aber irgendwas in der Art wird es ja sein, einfach zu testen

edit 2: also das if wird schon ausgeführt, aber das Array ist danach 0 lang, ist kürzer geworden,
prüfe das doch bitte mal im Detail
 

Marco13

Top Contributor
Sowas kann da auch helfen
Code:
void put( int index, int neuerWert)
{
    /* liegt die Position an der ein neuer Wert geschrieben werden soll, außerhalb der Dimensionn
       , dann muss dass array vergrößert werden*/

    System.out.println("Before put");
    System.out.println("array.length "+array.length+", index "+index+", valid? "+(index < array.length));

    if(array.length<= index)
    { expand(index - (array.length +1));}

    System.out.println("After expanding");
    System.out.println("array.length "+array.length+", index "+index+", valid? "+(index < array.length));

    array[index] = neuerWert;

}
 

Spin

Top Contributor
run:
Before put
array.length 1, index 0, valid? true
After expanding
array.length 1, index 0, valid? true
Before put
array.length 1, index 1, valid? false
After expanding
array.length 0, index 1, valid? false
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Methodenuebung.put(Methodenuebung.java:78)
at Methodenuebung.main(Methodenuebung.java:163)
Java Result: 1




Ich habe immer noch diese Fehler. Also von daher hat mir der letzte Code nichts gebracht, habe jedoch gerade design vorlesung ..und schau mir das nachher noch mal genau an, gruß spin

danke bisher
 
S

SlaterB

Gast
da war ja auch nur zur Ausgabe, um selber Fehler finden zu lernen..,

den Text 'After expanding' könne man noch in den if-Block hineinfügen ;)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben