probleme mit array

Status
Nicht offen für weitere Antworten.

rene04

Mitglied
Hallo,

hab da nen problem mit einem array, welches ich gerne sortieren würde.

Code:
<tr>
        <td>Submitter:</td>
        <td><select name="submitter" size="1">
        <%
            Iterator Iter = TrackStudioImportMain.getUserIterator();
            while(Iter.hasNext())
            {
                UserBean userBean = new UserBean();
                userBean = (UserBean)Iter.next();
                //Wenn der gefundene User kein Kunde ist, trage ihn in die Liste ein
                if(!userBean.getPrstatusId().equals("2c99888401872b940101d287a4013026") && 
                    !userBean.getPrstatusId().equals("5") &&                                    //SysOp
                    !userBean.getPrstatusId().equals("40284182028236a7010282ea889f0a35"))       //Partner
                {
                
                int i = 0;    
                String[] submitter = new String[50];
                submitter[i] = userBean.getName();
                i = i + 1;
        //%>
                //<option value="<%= userBean.getId()%>"><%= userBean.getName()%></option>
        //<%   
                }
            }
            
            Arrays.sort(submitter);
            for ( int i = 0; i < submitter.length; i++ )
            {
        %>
                <option value="<%= userBean.getId()%>"><%= userBean.getName()%></option>
        <%  
            }
        %>
        </select></td>
        <td> </td>
        <td>Submit Date:</td>
        <td><input class="klein" name="submitdate" type="text"></td>
        <td> </td>
        <td>Handler:</td>
        <td><input class="klein" name="handler" type="text"></td>
        <td> </td>
        <td>Budget:</td>
        <td><input class="klein" name="budget" type="text"></td>
    </tr>

fehler in zeile 27: cannot find symbol: submitter

was mache ich hier falsch?

gruesse rene
 
Du legst das Array submitter innerhalb der while-Schleife an, weshalb es auch nur da drin sichtbar ist.
Versuche mal, das Array schon vor while anzulegen.
 
Code:
<%
            Iterator Iter = TrackStudioImportMain.getUserIterator();
            String[] submitter = new String[50];
            while(Iter.hasNext())
            {
                UserBean userBean = new UserBean();
                userBean = (UserBean)Iter.next();
                //Wenn der gefundene User kein Kunde ist, trage ihn in die Liste ein
                if(!userBean.getPrstatusId().equals("2c99888401872b940101d287a4013026") && 
                    !userBean.getPrstatusId().equals("5") &&                                    //SysOp
                    !userBean.getPrstatusId().equals("40284182028236a7010282ea889f0a35"))       //Partner
                {
                
                int i = 0;    
                submitter[i] = userBean.getName();
                i = i + 1;
        //%>
                //<option value="<%= userBean.getId()%>"><%= userBean.getName()%></option>
        //<%   
                }
            }
            
            Arrays.sort(submitter);
            for ( int i = 0; i < submitter.length; i++ )
            {
        %>
                <option value="<%= userBean.getId()%>"><%= userBean.getName()%></option>
        <%  
            }
        %>

fehler: cannot find symbol Arrays

gruesse rene
 
jetzt ja 😉 jetzt gehts auch.

danke. aber nun hab ich ein eneues problem. angeblich kennt er i nicht.

Code:
<%
            Iterator Iter = TrackStudioImportMain.getUserIterator();
            String[] submitter = new String[50];
            String[] submitterId = new String[50];
            while(Iter.hasNext())
            {
                UserBean userBean = new UserBean();
                userBean = (UserBean)Iter.next();
                //Wenn der gefundene User kein Kunde ist, trage ihn in die Liste ein
                if(!userBean.getPrstatusId().equals("2c99888401872b940101d287a4013026") && 
                    !userBean.getPrstatusId().equals("5") &&                                    //SysOp
                    !userBean.getPrstatusId().equals("40284182028236a7010282ea889f0a35"))       //Partner
                {
                
                int i = 0;    
                submitter[i] = userBean.getName();
                submitterId[i] = userBean.getId();
                i++;
        //%>
                //<option value="<%= userBean.getId()%>"><%= userBean.getName()%></option>
        //<%   
                }
            }
            
            Arrays.sort(submitter);
            //for ( int i = 0; i < submitter.length; i++ )
            //{
        //%>
              //  <option><%= submitter[i]%></option>
        //<%  
            //}
        %>

gruesse rene
 
stell i als Klassen Variable auf!

Code:
gleich als erstes nach public class
{
  int i = 0;
und nimm das int in den schleifen vor i wech!
 
reicht auch wenn du das i vor die while-Schleife ziehst.
brauchst keine Klassenvariable
 
Hm, vermutlich würds auch reichen das i ebenfalls vor die Schleife zu ziehen, oder?

[edit]Hm, da war ich wohl zu langsam...[/edit]
 
ist aber übersichtlicher mit der Klassenvariablen und man kann in jeder einzelnen, zusätzlichen methode immer wieder darauf zugreifen.


:meld: Kann man halten wie ein Dachdecker
 
Aber wenn man nicht in einer anderen Methode darauf zugreifen will (was ich bei einer Zählvariablen auch ziemlich sinnlos finde), bringts halt echt nix...
 
dann kennt sich aber kein Mensch irgendwann mehr aus, wenn du zehn Methoden mit ein paar Schleifen hast.
Zählvariablen nie global definieren.
Gibt ne Regel dazu: So lokal wie möglich, so global wie nötig!
Hier ist global auf keinen Fall sinnvoll, von welcher Methode würde man schon auf nen Schleifenzähler einer anderen Methode zugreifen wollen.
 
Sorry MASTERmind, du meinst sicher eine Instanzvariable. :wink:
Klassenvariable:
Code:
private static int i = 0;
Instanzvariable:
Code:
private int i = 0;
Ansonsten stimme ich Gast zu. eine Instanzvariable würde in diesem Fall wenig Sinn machen.
Einen globalen (static) Zähler kann man sich in bestimmten Fällen vorstellen.
 
Hab´s mir nochmal angesehen.
Macht eher weniger Sinn.

"Also: ==> In der jeweiligen Methode vor die Zählschleife"
"int i = 0;"

Joa, hab die Begrifflichkeiten mit meinen Gedanken verwechselt.

ICh meinte sowas:

Code:
public void sortiere()
  {
    boolean sorted = false;
    this.data = new int[]{3,9,6,5}; //das ist der array der sortiert werden soll
    int i;

    while(!sorted)
    {
      sorted = true;
      for(i=0;i arr[i+1] ändern
        if(data[i] > data[i+1])
        {
          int help = data[i];
          data[i] = data[i+1];
          data[i+1] = help;
          sorted = false;
        }
      }
    }
 
habe hier noch ein problem.
Code:
submitter[i] = userBean.getName();
submitterId[i] = userBean.getId();

wenn ich das jetzt sortiere ist ja alles putt 🙁 die ids sollen ja in zugehörigkeit zu den namen erhalten bleiben. wisst ihr was ich meine? kann man das anders machen?

gruesse rene
 
ist ja auch klar, du sortierst zwei verschiedene Arrays
ich würde dir empfehlen eine HashMap zu verwenden anstatt der String-Arrays
 
Du könntest Name und Id auch in eine Klasse stecken und mit dieser das Interface Comparable so implementieren, daß z.B. nach dem Namen sortiert wird. Ein Array dieser Klasse kannst Du dann wieder mit Arrays.sort(...) sortieren, dann kommt vermutlich das raus was Du Dir vorstellst.
Wenn Du mal nach Name, mal nach Id sortieren willst kannst Du alternativ für beide Fälle je einen Comparator schreiben.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben