problem mit Listen

  • Themenstarter Themenstarter Salomon_san
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
S

Salomon_san

Gast
Hallo zusammen

ich habe ein Proframm in dem mir eine Fehlermeldung gegeben wird. Jedoch müsste diese anweisung nach meinem wissen so fuktionieren habe mir auch den Inhalt mal audgeben lassen und er ist korekt nur leider weis ich nicht mehr weiter

hier erst mal der Quelltext

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package uebung503;

import java.util.Arrays;
import java.util.List;

/**
 *
 * @author Salomon
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
int i = 2;
int j = 6;


String DB []={"UML","B2C","B2B","PORTAL","web-based","Java-Beans","Data Mining",
"skalierbar","Component-based","M-Commerce","CORBA","marktführend","portable"};
List list = Arrays.asList(DB);
String feld[][]=new String[i][j];

for (int k=0;k<i;k++)
{     for (int l=0;l<j;l++)
      {int z = zufall(0,DB.length);
         if (list.contains(DB[z]));
          feld[k][l]=DB[z];
          list.remove(DB[z]);
    }
// T[] DB toArray( T[] a );    
  }
    }

   static int zufall(int wert1, int wert2)
  {
    int[][] array = new int[wert1][wert2];
        int i=0,j=0,k=0;
        
    for(i=0; i<wert1; i++)
    { 
        for(j=0; j<wert2; j++)  
        {
         array[i][j] = k;   
            
        }
    } 
   return k;
   }
}

an der Stelle "list.remove(DB[z])" bekomme ich die Fehlermeldungen:

Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:144)
at java.util.AbstractList$Itr.remove(AbstractList.java:360)
at java.util.AbstractCollection.remove(AbstractCollection.java:252)
at uebung503.Main.main(Main.java:38)


Danke schon mal für euer bemühen
 
ich bitte viel mal um entschuldigung war der falsche Quelltext

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package uebung503;

import java.util.Arrays;
import java.util.List;

/**
 *
 * @author Salomon
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
int i = 2;
int j = 6;


String DB []={"UML","B2C","B2B","PORTAL","web-based","Java-Beans","Data Mining",
"skalierbar","Component-based","M-Commerce","CORBA","marktführend","portable"};
List list = Arrays.asList(DB);
String feld[][]=new String[i][j];

for (int k=0;k<i;k++)
{     for (int l=0;l<j;l++)
      {int z = Zufallszahl(feld.length);
         if (list.contains(DB[z]));
          feld[k][l]=DB[z];
          list.remove(DB[z]);
    }

  }
    }

 static int Zufallszahl(int l)    
        {         
            int result=(int)(1+Math.random()*l);
            return result;
        } 
}
 
Arrays.asList liefert eine ANSICHT auf den Array, den man (fast) wie eine Liste behandeln kann. Allerdings kann man aus einem Array keine Elemente löschen. Man müßte also eine neue Liste erstellen. D.h. die Zeile
List list = Arrays.asList(DB);
müßte lauten
List list = new ArrayList(Arrays.asList(DB));
 
Danke dir bin jetzt aber auf sets umgestiegen wobei ich aber auch deine Zeile brauche.

jetzt macht es aber trotzdem noch nicht was ich will. ich soll ein arry of arrays mit den angegebenen Wörtern füllen in zufälliger Zusammenstellung. wobei in dem Set wärend der laufzeit immer nur noch die Wörter stehen die ich nicht benutzt habe. und in dem Array darf jedes Wort auch nur einmal benützt werden.

hir mal mein bis jetzt geschriebener Quelltext

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package uebung503;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author Salomon
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
int i = 2;
int j = 6;


String DB []={"UML","B2C","B2B","PORTAL","web-based","Java-Beans","Data Mining",
"skalierbar","Component-based","M-Commerce","CORBA","marktführend","portable"};
Set list = new HashSet(Arrays.asList(DB));
String feld[][]=new String[i][j];
System.out.println(list);
for (int k=0;k<i;k++)
{     for (int l=0;l<j;l++)
      {int z = Zufallszahl(feld.length);
         if (list.contains(DB[z]));
          feld[k][l]=DB[z];
          list.remove(DB[z]);
       
    }

  }
Ausgabe(feld,i,j);
    }

 static int Zufallszahl(int l)    
        {         
            int result=(int)(1+Math.random()*l);
            return result;
        } 
 static void Ausgabe(String[][] t, int n, int m) {
        for (int j = 0; j < n; j++) {
            for (int i = 0; i < m; i++) {
                System.out.println(t[j][i]);
}
        }
 }
}
 
jetzt macht es aber trotzdem noch nicht was ich will.

Das machen Computer nie. Sie machen immer nur das, was man programmiert hat :wink:

Aber warum jetzt sets? Die sind für die Auswahl eines zufälligen Elements eher ungeeignet (oder geeignet: Die Reihenfolge der Elemente IST schon zufällig, aber das war sicher NICHT das, was der Aufgabensteller meinte)

Vermutlich ist das Semikolon hinter
if (list.contains(DB[z]));
falsch. Und was im else-Fall passieren soll, ist auch unklar. Überleg' dir mal (ohne Code, ohne Computer, sondern mit Bleistift und Papier) wie der Ablauf sein müsste. Und nicht in den Glauben verfallen, dass wenn DU nicht weißt, was an einer bestimmten Stelle gemacht werden müßte, es der Computer schon "instinktiv" richtig machen wird :wink:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben