Array - Suche

SPN_X

Mitglied
Hey, ich habe ein problem!
Ich habe angefangen ein programm zu schreiben stehe aber vor einem Problem!

Programm:
Ich habe ein array(unsortiert), zB (1,3,7,4,2,9,4,2,9)
Davon will ich einmal den Index mit der Größten Zahl ausgeben lassen und einmal das Array Sortieren. Im folgenden mein Code.
Sortieren funktioniert. Bekomme nur die ausgabe vom Index nicht hin.
Java:
public class Index1 
{ 
  public int getZahl(int array[])
  {
    int max=array[0];
    int i=1;
    while(i<array.length)
    {
        if (array[i]>max) 
        {
            max=array[i];    
        }
        i++;
    }
    return max;
  }
  
  
  public static void sort(int[] array) 
  {
      // Wir sezten Sortiert? auf True!
      boolean sortiert = true;
      do 
      {
          sortiert = true;
          // Nun gehen wir das Array komplett durch
          for (int i = 1; i < array.length; i++) 
          {
              // und vergleichen jedes Element mit dem linken Nachbar,
              // deshalb fängt die for-Schleife auch mit 1 an und nicht mit 0.
              if (array[i - 1] > array[i]) 
              {
                  // Sollte das linke Element größer sein als das rechte,
                  // so werden diese beiden vertauscht (tmp gemerkt).
                  final int tmp = array[i - 1];
                  array[i - 1] = array[i];
                  array[i] = tmp;
                  // Und wir merken uns, dass das Array eben doch
                  // nicht sortiert war -> false.
                  sortiert = false;
              }
          }
          // Die for-Schleife wird so lange durchlaufen,
          // bis keine Vertauschungen mehr nötig sind (sortiert = true)
          // Dies ist dann der Fall, wenn das array sortiert ist.
      } 
      while (!sortiert);
      // Diese Methode braucht auch keinen Rückgabewert,
      // da das übergebene Array modifiziert wird.
  }
  
  // Ausgabe
  public static void main(String[] args) 
  {
    // Die Zahlen des zu sortierenden Arrays
    int[] array = {5,8,9,4,6,3,7,2,1,8,10,145,24,895,246,1012};
    System.out.println(array[max]); //falsch - ich weiß 
    // Springt nach oben zu 'sort' und durchläuft die Schleife
    sort(array);
    // Ausgabe geordnet
    for (int i=0; i<array.length; i++) 
    {
      System.out.println(array[i]);
    }
  } 
}

PS. Bin Java anfänger
 
SPN_X hat gesagt.:
... Davon will ich einmal den Index mit der Größten Zahl ausgeben lassen ...
Code:
public int getZahl(int array[])
  {
    int max=array[0];
    int index = 0;
    int i=1;
    while(i<array.length)
    {
        if (array[i]>max)
        {
            max=array[i];
            index = i;
        }
        i++;
    }
    //return max;
    return index;
  }

Du suchst hier ja nur nach dem Maximum aber bestimmst nich den Index davon. Wenn du den Index willst muss du dir zu dem Maximum auch das entsprechende i merken. Die roten Ergänzungen liefern allerdings nur den Index wo das Maximum das erste mal vorkommt.

Gruß 4men
 
Ja aber max gibt mir doch den index int wert - der größten zahl, wieso dann noch extra index Max merkt sich ja den index, wo die größte steht!
Und wie gebe ich es aus?
Das Sortierte Array bekomm ich hin mit ~System.out.println()~ aber ich hab schon all mögliches probiert für die index der höchsten zahl des unsortierten arrays.
meine idee war ja
Java:
System.out.println(max);    //oder so ähnlich
// Oder
System.out.println("Der Index der Groessten Zahl ist: " + max);
Aber es klappt alles nicht!
Irgend welche fehler bau ich immer ein... -.-

1 error:
Index1.java:59: connot find symbol
symbol : variable max
location : class Index1
System.out.println(array[max]);
^
(auf m von max liegt der fehler)
 
Zuletzt bearbeitet:
Moin!
Von Hand zu sortieren ist eigentlich nicht nötig.. dafür gibt es ja die java.utils.Arrays Klasse und deren sort Methoden.
Das
Code:
System.out.println(max);    //oder so ähnlich
// Oder
System.out.println("Der Index der Groessten Zahl ist: " + max);

funktioniert natürlich nur, wenn man max auch deklariert, was du nicht getan hast. max hast du nur einmal als lokale Variable in deiner Methode getZahl deklariert, ergo kannst du in der main Methode nicht darauf zugreifen.
Und was das finden des Indexes für das Maxium ist, hat 4men schon recht. Du weist in deiner Schleife max dem maximal Wert deines Arrays zu, und nicht den Index dessen.
Wenn du es wie 4men machst, passt es schon..

*grüssle*
MeinerEiner
 
Ok also

Code:
max = array[0];

ist eine Zuweisung und zwar der Inhalt von array an der Stelle 0 (also die erste Stelle des Arrays) wird hier dem int max zugewiesen sonst nichts (auch kein Index).

Der Aufruf muss so ausschauen.
Code:
System.out.println(getZahl(array));

Eine mögliche Lösung schaut demnach so aus:
Code:
      public class Index1
      {
        public int getZahl(int array[])
        {
          int max=array[0];
          int index = 0;
          int i=1;
          while(i<array.length)
          {
              if (array[i]>max)
              {
                  max=array[i];   
                  index = i;
              }
              i++;
          }
          return index;
        }
       
        public static void sort(int[] array)
        {
            boolean sortiert = true;
            do
            {
                sortiert = true;
                for (int i = 1; i < array.length; i++)
                {
                    if (array[i - 1] > array[i])
                    {
                        final int tmp = array[i - 1];
                        array[i - 1] = array[i];
                        array[i] = tmp;
                        sortiert = false;
                    }
                }
            }
            while (!sortiert);
        }

        public static void main(String[] args)
        {
          int[] array = {5,8,9,4,6,3,7,2,1,8,10,145,24,895,246,1012};
          System.out.println(getZahl(array));
          sort(array);
          for (int i=0; i<array.length; i++)
          {
            System.out.println(array[i]);
          }
        }
      }

Gruß 4men

PS Im Netz findest du ein paar gute Onlinebücher zum Thema Java Programmierung
 
OKOK, alles schön und gut, aber habt ihr mal den Quelltext getestet?
Bei mir bringt er immernoch den Fehler ::System.out.println(getZahl(array));:: bei den getZahl

Nochmal mein bisheriger/aktueller Code:
Java:
public class Index1 
{ 
  public int getZahl(int array[])
  {
      int max=array[0];
      int index = 0;
      int i=1;
      while(i<array.length)
      {
          if (array[i]>max)
          {
              max=array[i];   
              index = i;
          }
          i++;
      }
      return index;
  }
  
  public static void sort(int[] array) 
  {
      boolean sortiert = true;
      do 
      {
          sortiert = true;
          for (int i = 1; i < array.length; i++) 
          {
              if (array[i - 1] > array[i]) 
              {
                  final int tmp = array[i - 1];
                  array[i - 1] = array[i];
                  array[i] = tmp;
                  sortiert = false;
              }
          }
      } 
      while (!sortiert);
  }
  
  public static void main(String[] args) 
  {
    int[] array = {5,8,9,4,6,3,7,2,1,8,10,145,24,895,246,1012};
    int max = 0;
    System.out.println(getZahl(array));
    sort(array);
    for (int i=0; i<array.length; i++) 
    {
      System.out.println(array[i]);
    }
  } 
}

P.S. Ich habe auch schon online gesucht aber genau mein die lösung auf mein problem zu finden .... ich such ja schon lange! Aber finde nicht das was ich brauche.

Könnt ja mal testen - mein Code...
 
Ich nehme mal an dass du noch Java 1.4 verwendest?

Der Code ist soweit richtig, die Zeile
Java:
System.out.println(getZahl(array));

macht ein Problem da mit System.out.println nur Strings bzw Objekte (implizit über toString()) ausgegeben werden können und es sich bei dir um einen int, also einen primitiven Typen handelt. Benutze einfach:
Java:
System.out.println(Integer.toString(getZahl(array)));
dann sollte es gehen.

Java 1.5 kann auch einen int in System.out.println ausgeben, da dieser in dem Fall implizit in einen Integer geboxt und dann mit toString() ausgegeben wird. Daher fällt diese Zeile bei neueren Java Versionen nicht mehr auf.
 
Nene ich habe 1.5!
Aber ich habe mein Problem gelöst... danke für eure Hilfe.
Hier nochmal für alle dies interessiert der Code:
Java:
import java.util.*;
public class Index1 
{
  public static void binaraySearch(int[] array)
  {
      int max=array[0];
      int index = 0;
      int i=1;
      while(i<array.length)
      {
          if (array[i]>max)
          {
              max=array[i];   
              index = i;
          }
          i++;
      }
      System.out.println("\nDie groesste Zahl steht im Index " + index + "!");
  }
  
  public static void sort(int[] array) 
  {
      boolean sortiert = true;
      do 
      {
          sortiert = true;
          for (int i = 1; i < array.length; i++) 
          {
              if (array[i - 1] > array[i]) 
              {
                  final int tmp = array[i - 1];
                  array[i - 1] = array[i];
                  array[i] = tmp;
                  sortiert = false;
              }
          }
      } 
      while (!sortiert);
  }
  
  // Ausgabe
  public static void main(String[] args) 
  {
    int[] array = {4,5,8,7,2,9,10,3,2,3,9};
    System.out.println("Das unsortierte Array:");
    for (int i=0; i<array.length; i++) 
    {
      System.out.print(array[i]+", ");
    }
    // Suche nach der Größten Zahl!
    binaraySearch(array);
    sort(array);
    System.out.println("");
    System.out.println("Das Sortierte Array:");
    for (int i=0; i<array.length; i++) 
    {
      System.out.print(array[i]+", ");
    }
  } 
}

SPN_X ;-]
 
Zurück