Minimumsnorm bestimmen

TheBeginner

Mitglied
Hallo Zusammen,

das ist mein erster Thread hier, um bin im Wahrsten Sinne des Wortes: TheBeginner.

Ich hoffe ihr könnt meine Aufgabenstellung einsehen:

Wie ihr seht muss ich die Mininumsnorm bestimmen. Mir ist nicht klar, wie ich das aufschreiben soll, das ich vom Array die betragsmäßigst kleine Zahl her kriege.


mein Ansatz:

for( int entry: array) { // Dadurch werden ja alle Werte im Array durchgeschaut

if( entry


Da hört es schon leider auf....

Danke im Voraus
 

Anhänge

  • 1.png
    1.png
    38,2 KB · Aufrufe: 67
Zuletzt bearbeitet von einem Moderator:
Einfach wenn der aktuelle Eintrag kleiner als das bisherige Minimum ist, wird das bisherige Minimum überschrieben. Initial setzt du diesen Wert auf [c]Integer.MAX_VALUE[/c].
 
Hi,

in etwa so:

Java:
int min = Integer.MAX_VALUE;
for(int entry: array)
   min = Math.min(min, Math.abs(entry));

Gruß Micha
 
Hi ,

ich glaub wir müssen von Anfang an anfangen:

Folgende Fragen sind im Vorhinaus zu klären:

Ich verstehe nicht ganz was unter Integer.Max_VALUE zu verstehen ist.

Das soll ja eine Konstante sein. Enspricht diese dem größten Wert der sich im Array befindet ???

Und das Math.min oder Math.abs sagt mir leider gar nichts. Klar habe ich mal was von Bibliothek gehört wo so ein sinus etc definiert wurde, aber wie man damit arbeitet, weiß ich leider nicht.


Danke schonmal für die schnellen Antworten...

Bitte bei möglichst ausführlich erklären, da ich ja der Beginner bin 😉
 
Was denkst du, was [c]Integer.Max_VALUE[/c] heisst? Nicht durch Zufall "grösster Wert" 😉 ? Steht auch in der Aufgabenstellung.
[c]min[/c] -> minimum
[c]abs[/c] -> absoluter Wert einer Zahl
Ansonsten: [japi]Integer[/japi] und [japi]Math[/japi]
 
Hier ist eine Lösung mit der ich gar nichts anfangen kann.
Bitte sagt mir,ob ich die Lösung überhaupt verstehe..

Hier ist eine Lösung mit der ich gar nichts anfangen kann.
Bitte sagt mir,ob ich die Lösung überhaupt verstehe..


Java:
Hier ist eine Lösung mit der ich gar nichts anfangen kann.
Bitte sagt mir,ob ich die Lösung überhaupt verstehe..


public static int minNorm( int[ ] array ) {

int temp= Integer.MAX_VALUE ;            
                                                      

for ( int entry : array ) {                  
if( Math.abs(entry) < temp) {          

temp= Math.abs(entry) ; 
    }
  }
return temp;
}











public static int minNorm( int[ ] array ) {

int temp= Integer.MAX_VALUE ; // Der Variable temp, wird der größte Wert des Array
zugeschrieben. Damit das Sinn macht, muss diese Konstante
den betragsmäßig größten Wert übergeben.
Wäre z.B der Array (-1,-100,19) müsste temp nun lauten 100

for ( int entry : array ) { // Die Variable entry geht den gesamten Array durch.
if( Math.abs(entry) < temp) { // Was heißt Math.abs ?Die Liste die mir im Link geg. wurde stand nichts dazu.Verstehe nicht was die if-Schleife bringt.
temp= Math.abs(entry) ;
}
}
return temp;
}
 
Es sind ja alle absoluten Werte kleiner als int.MAX_VALUE

Wo wird denn hier im Code gesagt, das er den kleinsten nehmen soll.
Meiner Meinung nach nirgends...
 
Absolutwert von 7 ist 7. Von -5 ist es 5. Merkst du was 🙂 ?
Edit: Nein, [c]Integer.MAX_VALUE[/c] ist nicht 100 sondern der grösstmögliche int, also [c]2^31-1[/c].
 
Java:
		int temp = Integer.MAX_VALUE;

		for (int entry : array) {// Hier läuft er über das array
			if (Math.abs(entry) < temp) {//wenn der absolute Wert von entry kleiner als temp ist, dann soll temp =entry sein, als absoluter Wert
				temp = Math.abs(entry);
			}
		}
		return temp;
 
Es können ja mehrere Werte kleiner als temp sein.

Da ja temp = Integer.MAX_VALUE;
ist
.


Woraus wird entnommen genau dieser Eine genommen werden soll.


Danke für die antworten..
 
Ich verstehe nicht ganz was unter Integer.Max_VALUE zu verstehen ist.
Code:
Integer.MAX_VALUE
(so!) ist eine Kurzschreibweise für
Code:
java.lang.Integer.MAX_VALUE
, das ist ein Feld (=Eigenschaft) namens MAX_VALUE der Klasse Integer im Paket java.lang und ist laut API-Dokumentation "A constant holding the maximum value an int can have".
  1. Java Platform SE 7
  2. Oben links das Paket "java.lang" auswählen.
  3. Dann unten links die Klasse "Integer" auswählen.
  4. Dann im großen Bereich rechts unter "Field Summary" nach MAX_VALUE suchen.
  5. Beschreibung ablesen.
Gleiches Vorgehen für
Code:
java.lang.Math.sin()
und
Code:
java.lang.Math.min()
. Anfangs ist es etwas schwierig, da durchzusteigen, aber mit der Zeit merkt man sich, wo man was findet.

Bitte bei möglichst ausführlich erklären, da ich ja der Beginner bin 😉
Das hier ist ein Forum für konkrete Fragen (gern auch von Java-Anfängern), aber alle Grundlagen werden wir dir hier nicht einfach so beibringen. Dafür gibt es nämlich Unmengen an Lehrmaterial im Netz und auch offline. Wenn du willst, dass dir jemand alles erklärt, wirst du hier auch fündig - braucht aber wahrscheinlich etwas Geld. 😉

Es können ja mehrere Werte kleiner als temp sein. Da ja temp = Integer.MAX_VALUE; ist.

Woraus wird entnommen genau dieser Eine genommen werden soll.
(Formatierungsänderungen im Zitat von mir.) Diese Fragen sind eher mathematischer Natur und haben eigentlich nichts mit Java zu tun. temp in diesem Fall zu Beginn auf
Code:
Integer.MAX_VALUE
zu setzen, liegt einfach daran, dass
Code:
Integer.MAX_VALUE
das neutrale Element der Minimumsfunktion ist:

Code:
Math.min(a, Integer.MAX_VALUE) == a
bzw.
Code:
Math.min(Integer.MAX_VALUE, a) == a
für alle [c]int a[/c].

Wenn man mit diesem Wert anfängt, kann man also nichts falsch machen (bei der hier vorliegenden Problemstellung).

Ark

EDIT:
Die Mininumsnorm besteht ja nur aus genau einer betragsmäßig kleinsten Zahl...
Was die Anzahl der Vorkommen des Minimums in einer Folge von Zahlen betrifft, gibt es im vorliegenden Fall wohl nur eine Regel: Das Minimum muss in der Folge/Menge vorkommen. Es kann aber auch mehrfach enthalten sein. Und dennoch ist das Minimum eindeutig. 😉

Ark
 
Zuletzt bearbeitet:
code sagt mehr als 1000 Worte:
Java:
int[] array = { 4, 2, 121, 423, 5134, 213, 23123, 1, 52, -23123, 21312,
				-53, -1235567, 231545 };

		int temp = Integer.MAX_VALUE;
		int i = 1;
		for (int entry : array) {// Hier läuft er über das array
			System.out.println("Durchlauf: " + i);
			i++;

			if (Math.abs(entry) < temp) {// wenn der absolute Wert von entry
											// kleiner als temp ist, dann soll
											// temp =entry sein, als absoluter
											// Wert
				System.out.println("\t" + entry + " (entry) ist  kleiner als "
						+ temp + " (temp)");
				System.out
						.println("\t\ttemp bekommt entry zugewiesen...daher ist temp jetzt der kleinste Wert ("
								+ entry + ")");
				temp = Math.abs(entry);
			}
[xml]Durchlauf: 1
4 (entry) ist kleiner als 2147483647 (temp)
temp bekommt entry zugewiesen...daher ist temp jetzt der kleinste Wert (4)
Durchlauf: 2
2 (entry) ist kleiner als 4 (temp)
temp bekommt entry zugewiesen...daher ist temp jetzt der kleinste Wert (2)
Durchlauf: 3
Durchlauf: 4
Durchlauf: 5
Durchlauf: 6
Durchlauf: 7
Durchlauf: 8
1 (entry) ist kleiner als 2 (temp)
temp bekommt entry zugewiesen...daher ist temp jetzt der kleinste Wert (1)
Durchlauf: 9
Durchlauf: 10
Durchlauf: 11
Durchlauf: 12
Durchlauf: 13
Durchlauf: 14[/xml]
 
Wozu überhaupt Integer.MAX_VALUE möchte man fragen.
Im Grunde könnte man hier temp auch mit dem Absolutwert des ersten Array-Elements initialisieren.
Integer.MAX_VALUE darf zwar verwendet werden, muss aber wohl nicht.
 
pappawinni, na dann müsstest du aber noch [c]if (array.length > 0)[/c] abfragen. Ansonsten kriegst du einfach [c]Integer.MAX_VALUE[/c] als Resultat, wenn das Array leer ist 🙂
 
Die Mininumsnorm besteht ja nur aus genau einer betragsmäßig kleinsten Zahl...

Hier muss ich mal ganz blöd nachfragen. Steht in der Aufgabenstellung nicht etwas von einer Funktion, die alle Werte auf den betragsmäßig niedrigsten Wert abbildet?

Demzufolge müsste doch ein Array zurückgegeben werden? 😱

Außerdem: Ist
Java:
int min = Integer.MAX_VALUE;
for(int entry: array)
   min = Math.min(min, Math.abs(entry));
nicht langsamer als
Java:
int min = array[0];
for (int i : array) {
  int a = Math.abs(i);
  if (a < min)
    min = a;
}
Oder irre ich mich jetzt?

Kurze Erklärung: min und i sind Variablen des Typs int. Variablen binden einen Wert an einen Namen. for-each ist eine Schleife, die sukzessive alle Werte/Elemente eines Arrays (oder einer anderen iterierbaren Datenstruktur) der Variablen i zuweist. if ist eine bedingte Anweisung (auch eine Kontrollstrukur), die in ihr enthaltenen Code nur dann ausführt, wenn vorher ihre Bedingung zutraf
 
Zuletzt bearbeitet von einem Moderator:
pappawinni, na dann müsstest du aber noch [c]if (array.length > 0)[/c] abfragen. Ansonsten kriegst du einfach [c]Integer.MAX_VALUE[/c] als Resultat, wenn das Array leer ist 🙂

Die Frage wäre, ob es denn richtig ist, bei einem leeren Array überhaupt einen Wert zurück zu liefern, also so zu tun, als gäbe es ein Ergebnis, obwohl es eigentlich keines geben kann.
Ich stell mir vor, ich gehe an den Zigarettenautomaten und werfe kein Geld ein und kriege dann, weil die Eingabe von 0 Euro nicht definiert ist, ich aber trotzdem eine Ausgabetaste gedrückt habe, den ganzen Inhalt des Automaten, oder wie?
 
Hier muss ich mal ganz blöd nachfragen. Steht in der Aufgabenstellung nicht etwas von einer Funktion, die alle Werte auf den betragsmäßig niedrigsten Wert abbildet?

Demzufolge müsste doch ein Array zurückgegeben werden?

Also wenn ich die Aufgabenstellung richtig verstanden habe, dann sollte die Minimumnorm ein einzelner Wert sein, nämlich der betragsmäßig kleinste Wert eines Vektors.
Bei Wikipedia hab ich leider nur Maximumsnorm gefunden. Im diesbezüglichen Beispiel wird dort dann auch ein einzelner Wert als Maximumsnorm (bzw. Maximumnorm) angebenen.
 
Ich stell mir vor, ich gehe an den Zigarettenautomaten und werfe kein Geld ein und kriege dann, weil die Eingabe von 0 Euro nicht definiert ist, ich aber trotzdem eine Ausgabetaste gedrückt habe, den ganzen Inhalt des Automaten, oder wie?

Es gibt bei uns einen Getränkeautomaten, in den man manchmal 1€ rein wirft und 2+Getränk wieder herausbekommt 😉

Also wenn ich die Aufgabenstellung richtig verstanden habe, dann sollte die Minimumnorm ein einzelner Wert sein,

Kann auch sein.Finde solche Definitionen immer schrecklich, weil die manchmal so la la sind 😳 😳 😱

Aber wurscht, TheBeginner hat ja jetzt die Lösung bereits...Vielleicht könnte man noch ein paar Benchmarks machen 😀
 

Neue Themen


Zurück
Oben