Min eines Arrays mit Objekten

Kloman01

Mitglied
Hallo,

eine Frage. Angenommen ich habe zwei Klassen. In Klasse A haben wir eine private Komponente. In Klasse B haben wir ein Array mit Objecten der Klasse A. Die private Komponente wird mittels einer Methode eingelesen.

Wie könnte ich den kleinsten Wert herausfinden um mit diesem weiterzuarbeiten ?

Vielen Dank im Voraus,
eine Text-Antwort wäre super ! (Keine Lösung)

MfG Kloman01
 
Also nochmal für mein Verständnis: Du hast Klasse A und B. A hat gewisse private Attribute (die Basis auf denen du sortieren willst). B hat ein Array bestehend aus A's.

Wenn das so richtig ist:
Sollte A Comparable implementieren, damit kannst du dann dein Array/Collection sortieren und kannst dir dann von der ersten Stelle dein "kleinstes" Element holen.
 
Also wenn du meinst das A's Objecte der Klasse A sind dann ja ! 😀

Comparable hab ich leider noch nicht verwendet. Wie würde das genau funktionieren ?
 
Hier ein Beispiel, wie ich dein Problem verstehe (gleich mit Lösungsansatz):

Java:
import java.util.Arrays;

public class Test {

  public static void main(String... args) {
    A[] arr = new A[]{new A(2), new A(-20), new A(10), new A(20), new A(-5)};
    B b = new B(arr);
    A a = b.printArrayAndGetSmallest();
    System.out.println(a.getAttribute());
  }

  public Test() {
  }
}

class A implements Comparable<A> {

  private int attribute;

  public A(int attribute) {
    this.attribute = attribute;
  }

  public int getAttribute() {
    return attribute;
  }

  public void setAttribute(int attribute) {
    this.attribute = attribute;
  }

  @Override
  public int compareTo(A o) {
    return Integer.compare(attribute, o.attribute);
  }

  @Override
  public String toString() {
    return "A{" + "attribute=" + attribute + '}';
  }
}

class B {

  private A[] myArr;

  public B(A[] myArr) {
    this.myArr = myArr;
  }

  public A printArrayAndGetSmallest() {
    Arrays.sort(myArr);
    System.out.println(Arrays.toString(myArr));
    return myArr[0];
  }
}
 
ich halte eine komplette sortierung für overkill wenn nur der kleinste eintrag wichtig ist. Da reicht es einfach einmal rüberzugehen und in eine weitere variable das objekt zu speichern falls es kleiner ist. es müsste eigentlich schneller gehen und sieht auch simpler aus 😀

angenommen Klasse A bestitzt eine Methode boolean isSmaller(A a) welche true ist wenn das objekt kleiner ist als das übergebene

Java:
A[] mengeVonA;
A smallest = null;
for(int i = 0; i < mengeVonA.length; ++i){
  if(smallest == null || mengeVonA[i].isSmaller(smallest)){
    smallest = mengeVonA[i];
  }
}
sollte smallest am ende noch null sein war kein element in der liste. natürlich kann man das noch anderweitig umschreiben. aber das erstmal als grundgerüst.

LG Chloroplast
 
Zuletzt bearbeitet:
Ich glaub ich muss mein Problem nochma erklären bzw weiter ausholen.

Also ich hab meine Klasse A :

Java:
import java.util.*;


public class StockTick  {
	public float kursDiff;
	private double kurs;
	
//	public StockTick(double X1) {
//		this.kursDiff = (float)X1;
//	}
	
	public String toString() {
		String str = String.valueOf(this.kurs);
		return str;
		
	}
	
	public void input(double X1) {
		this.kurs = X1;
	}
	
	
	public double getKurs() {
		return this.kurs;
		
	}
	
	public void setKurs(double letztKurs, float kursDiff) {
		this.kurs = letztKurs + kursDiff;
	}
}

Hier meine Klasse B mit der Main

Java:
import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner nScan = new Scanner(System.in);
		StockTick[] kursArray = new StockTick[21];

		for (int i = 0; i < kursArray.length; i++) {
			kursArray[i] = new StockTick();
		}
		double X1 = Math.floor((Math.random() * (600 - 500)) + 500);
		kursArray[0].input(X1);

		for (int i = 1; i < kursArray.length; i++) {
			double X = Math.floor(Math.random() * 60) - 30;
			kursArray[i].kursDiff = (float)X;
		}

		System.out.println("Anfangskurs Tag 0 : " + kursArray[0]);

			for (int j = 1; j < kursArray.length; j++) {
				System.out.println("Kursveränderung Tag " + j + " : " + kursArray[j].kursDiff);
			}
			
			for (int i = 1; i < kursArray.length; i++) {
				kursArray[i].setKurs(kursArray[i-1].getKurs(), kursArray[i].kursDiff);
			}
			
			for (int j = 1; j < kursArray.length; j++) {
				System.out.println("Kurs Tag " + j + " : " + kursArray[j]);
			}
			

		}
	}

Sprich wir haben ein Startkurs einer Aktie Random und Random kursschwankungen. Durch den Startkurs und die schwankungen setzen wir das private attribut kurs letzendlich. Sprich jedes Object hat in diesem privaten attribut seinen aktuellen kurs gespeichert. um nun herauszufinden, wann man es am besten gekauft hätte, brauch ich den kleinsten wert. anschließend muss ich zwischen dem kleinsten, und allen nachfolgenden die großte gewinnspanne noch ausrechnen.

Denn wenn ich das so wie Chloroplast mache, werd ich drauf hingewiesen das die Methode isSmaller nicht für den Tyyp StockTick definiert ist.
 
logisch, ich meinte damit wenn man eine methdode hat die das verarbeitet. dann schreib doch einfach eine. müsst irgentwie so aussehen (für fehler bitte nicht schlagen - es ist schon spät und ich bin müde)

Java:
public boolean isSmaller(StockTick other){
  return this.getKurs()<other.getKurs();
}
 

Zurück
Oben