Array Elemente auslesen

Status
Nicht offen für weitere Antworten.
Hi,

an dieser Lösung bin ich ein wenig stecken geblieben.

Und zwar habe ich:

a={1,2,3,1,2,3,4,5}

und möchte alle Elemente auslesen und dann

b={1,2,3,4,5}

Mit forSchleifen läuft das ja nicht da ich keine vernünftige bedingung für b hinkriege? oder doch?
 
wie bereits anderswo mehrfach erwähnt: hier sind weder arrays noch schleifen angebracht, da kriegst du immer irgendeinen hässlichen O(n²) aufwand...
=> Statt Arrays & Iteration sind hier Bäume & rekursion viel schöner.

Aber zur Übung kannst du es auch mit arrays versuchen. Mach das in 2 schritten:
1) doppelte einträge löschen (alles n² mal durchgehen, alle unnötigen einträge markieren, zum schluss in einem neuen array einsammeln, ausgeben)
2) sortieren. Da sind der phantasie keine grenzen gesetzt.
 
ja sortieren weiß ich wie das geht.

wenn ich aber einträge lösche (wie geht das überhaupt?) verringert sich die länge auch automatisch?
 
neee, wenn du was löschen willst, dann nimm einfach normale collections...

Bei arrays musst du dich manuell mit der markierung der doppelten elemente (etwa in einem separaten boolean-array) rumschlagen, und später alle unmarkierten elemente in ein neues array rüberkopieren.
​
 
hmmmm

irgendwie

also angenommen ich will zwei arrays auf ihre elemente vergleichen. habe ich schon mal in einem anderen thread geschrieben.

aber so einfach ist die lösung nun doch nicht

also a soll mit b verglichen werden

a={1,2,2,2,2,1,3,4,5}

b={2,1,2,3,4,5}

vergleichmethode soll dann k = true liefern

wei stelle ich dass an mit einem einfachen algorithmus?

ich kann ja den größten wert berechnen

mit

[HIGHLIGHT="Java"]int gW;
gW=a[0];
for (int i=0;i<a.length;i++){
if (a>gW{
gW=a}
}

b[0]=gw[/HIGHLIGHT]

wie kann ich denn so eine schlife bauen, die dann den zweit größten und so witer errechnet? oder ist hier eine rekursion lösung möglich?

dann könnte ich einfach jeweils die werte vergleichen, also den größten wert von a mit dem von b , dann den zweitgrößten und so weiter... finde aber keine vernünftige schliefe für

tipp?
 
Zuletzt bearbeitet von einem Moderator:
[highlight="Java"]import java.util.Arrays;

public class Foo {

public static void main( String[] args ) {
int[] a = { 1, 2, 3, 1, 2, 3, 4, 5 };
Arrays.sort(a);
int size = a.length;
// neue Arraygröße ermitteln
for (int i = 0; i < a.length - 1; i++) {
if (a == a[i+1]) {
size--;
}
}
// neues Array anlegen
int b[] = new int[size];
int j = 0;
// Elemente kopieren
for (int i = 0; i < a.length - 1; i++) {
if (a == a[i+1]) {
continue;
}
b[j] = a;
j++;
}
// letztes Element berücksichtigen
if (a[a.length - 1] != a[a.length - 2]) {
b[b.length - 1] = a[a.length - 1];
}
for ( int i : b ) {
System.out.println(i);
}
}

}[/highlight]


oder

[highlight="Java"]import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

public class Foo {

public static void main( String[] args ) {
int[] a = { 1, 2, 3, 1, 2, 3, 4, 5 };
Arrays.sort(a);
List<Integer> list = new ArrayList<Integer>();
for ( int i : a ) {
list.add(i);
}
Object[] array = new HashSet<Integer>(list).toArray();
int[] b = new int[array.length];
for ( int i = 0; i < array.length; i++) {
b = (Integer) array;
}
for ( int i : b ) {
System.out.println(i);
}
}

}[/highlight]
 
Zuletzt bearbeitet von einem Moderator:
Die Schleifenbedingung ist " i < a.length - 1" also bis zum vorletzten Element. warum? weil es sonst eine ArrayIndexOutOfBoundsException gibt, da innerhalb der schleife a[i+1] verwendet wird. Man könnte nun entweder in der schleife jedesmal den index prüfen unsw oder man kopiert eben das letzte element wenn es denn anders ist (finde ich einfacher)

Edit: continue braucht man damit der untere Teil nicht ausgeführt wird.

Besser wäre warscheinlich

[highlight="Java"] for ( int i = 0; i < a.length - 1; i++ ) {
if ( a != a[i + 1] ) {
b[j] = a;
j++;
}
}[/highlight]

also die prüfung auf ungleich und nicht auf gleich
 
Zuletzt bearbeitet von einem Moderator:
Habe noch einen kleinen Fehler entdeckt, wenn das array mit zwei gleichen Zahlen endet wurde das letzte Element nicht berücksichtigt.

[highlight="Java"]import java.util.Arrays;

public class Foo {

public static void main( String[] args ) {
int[] a = { 1, 2, 3, 1, 2, 3, 4, 5, 5, 5 };
Arrays.sort(a);
int aL = a.length;
int size = aL;
// neue Arraygröße ermitteln
for ( int i = 0; i < aL - 1; i++ ) {
if ( a == a[i + 1] ) {
size--;
}
}
// neues Array anlegen
int b[] = new int[size];
int j = 0;
// Elemente kopieren
for ( int i = 0; i < aL - 1; i++ ) {
if ( a != a[i + 1] ) {
b[j] = a;
j++;
}
}
int bL = b.length;
if ( a[aL - 1] != a[aL - 2]
|| b[bL - 1] != a[aL - 1] ) {
b[bL - 1] = a[aL - 1];
}
for ( int i : b ) {
System.out.println(i);
}
}

}[/highlight]
 
ja super danke!!!

was habe ich denn hier für mist gebaut???

geht darum dass ich die anzahl der größten elemente ermitteln will

[HIGHLIGHT="Java"]public class CountMax {
public static void main (String[] args){
static int maxCount(int[] a){
int[] a={1,2,4,12,4,5,12,12,3};
int gW,size,mw;
gw = a[0];
for (i=0; i<a.length;i++){
if gW<a {
gW=a;
}
}
for (i=0;i<a.length;i++){
if gW=a{
size++;
}
}
System.out.prinln("Die größte Zahl"+gW+"kommt"+size+"mal vor.");
}
}
}[/HIGHLIGHT]

darf wahrschienlich die methoden nicht verschacteln???
 
Zuletzt bearbeitet von einem Moderator:
ok muss wahrscheinlich so aussehen:

public class CountMax {
static int maxCount(int[] a){
int[] b ={1,2,4,12,4,5,12,12,3};
int gW,size,mw;
size=0;
gW = b[0];
for (int i=0; i<b.length;i++){
if (gW<b) {
gW=b;
}
}
for (int i=0;i<b.length;i++){
if (gW==b){
size++;
}
}
System.out.println("Die größte Zahl"+gW+"kommt"+size+"mal vor.");
}
}

class CountMaxTest {
public static void main (String[] args){
CountMax.maxCount();
}

wieso kriege ich aber beim compilieren den Fehler
CountMax.java missing return statement...
 
Zuletzt bearbeitet:
Bitte in Zukunft selbständig den Sourcecode formatieren und highlight benutzen. Der Editor bietet das Highlight als Knopf an. Tippen kann man das so:
[noparse][HIGHLIGHT="Java"]// Java-Quelltext hier...[/HIGHLIGHT][/noparse]​
Sieht dann so aus: [HIGHLIGHT="Java"]// Java-Quelltext hier...[/HIGHLIGHT]

Ebenius
 
ok werde ich beachten danke!

ok, so die eigentlich klasse sieht nun so aus und das akzeptiert auch der compiler

Code:
public class CountMax {
public static void maxCount(int[] a){
int[] b ={1,2,4,12,4,5,12,12,3};
int gW,size,mw;
size=0;
gW = b[0];
for (int i=0; i<b.length;i++){
if (gW<b[i]) {
gW=b[i];
}
}
for (int i=0;i<b.length;i++){
if (gW==b[i]){
size++;
}
}
System.out.println("Die größte Zahl"+gW+"kommt"+size+"mal vor.");
}
}

Beim aufrufen der Methode kriege ich jedoch den Fehler, maxcount in countMax cannot be applied... Wieso???

Code:
class CountMaxTest {
public static void main (String [] args) {
CountMax.maxCount();
}
}

wieso???
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben