Java Felder

Sil3ntCoder

Neues Mitglied
Ich habe ein Feld erstellt mit int[] a = {2,3,4,5} und möchte nun das kleinste Element löschen, das ich bereits mit
public int min(int[] liste) {
int res = liste[1];
for (int i = 0; i < liste.length; i++) {
if (res > liste)
res = liste;
}
return res;
}
herausgefunden habe.
 
Überarbeite erst einmal noch deine min-Funktion. Und was soll diese liefern? Den kleinsten Wert oder den Index des kleinsten Werts im array?
 
Zumal: Code bitte in Code-Tags. Siehe meine Signatur oder im Editor auf "Einfügen" klicken (4. Button von Rechts).
 
Am besten gehst du so vor, dass du erst einmal den Index des kleinsten Elementes suchst:
Java:
int[] list = new int[]{2, 3, 4, 5};

int minIndex = 0;
int minValue = Integer.Max_Value;

for (int i = 0; i < list.length; i++) {
    if (list[i] < minValue) {
        minValue = list[i];
        minIndex = i;
    }
}

System.out.println("min value: " + minValue + ", minIndex: " + minIndex);

Danach erstellst du ein neues Array mit list.length - 1 Feldern, gehst in einer for-Schleife die Elemente durch und überspringst aber das Element, welches in minIndex steht.
Java:
int[] newList = new int[list.length - 1];

int k = 0;

for (int i = 0; i < list.length; i++) {
    if (i != minIndex) {
        newList[k] = list[i];
        k++;
    } else {
        //dont add this number to list
    }
}

Falls dir die Antwort gefallen hat, dann lass doch bitte ein "Gefällt mir" da! 😀
 
Was passiert, wenn zwei Werte gleich sind? Also der Min-Wert mehrmals vorkommt? Diese Erweiterung könntest du ja selber hinzufügen...
 
@MiMij @Robat

Und was bringt ihm jetzt die fertige Lösung?

Ganz einfach:
Oftmals sind Anfänger noch nicht so weit, um selbst eine Lösung erstellen zu können. Sie müssen erstmal ein "Beispiel" sehen, um zu verstehen, wie es funktioniert. Es ist seine erste Frage in diesem Forum, also habe ich ihm solch ein Beispiel geboten. Etwas, das einem wirklich weiter hilft.
Und keine 10.000 Fragen, die weder Probleme aufdecken, noch den Lösungsweg ansatzweise zeigen.
Wenn du in einer Mathematik Vorlesung sitzt und nur die Definition kennst, nützt dir das auch relativ wenig, sinnvoller ist es, auch mal ein Beispiel zu sehen. Es ist viel leichter erstmal zu sehen, wie jemand anderes einen Nagel in die Wand schlägt und man es dann selbst probiert, als wenn man die Bedienungsanleitung des Hammers lesen müsste.

Und statt "Und was soll diese liefern? Den kleinsten Wert oder den Index des kleinsten Werts im array?" könnte man auch einfach sagen: "Am einfachsten gehst du so vor, dass du zuerst den Index des kleinsten Wertes herausbekommst" (die Fragen sind trotzdem nicht schlecht, aber ein Ratschlag hilft oftmals besser als viele 10.000 Fragen).

Desweiteren schreibt er hier im Allgemeinen Java Forum und nicht im Anfänger Forum. In diesem Forum sehe ich es nicht als meine Aufgabe an, ihn stückweit mit der Lösung zu füttern. Wenn er Java / programmieren erst verstehen will, soll er die Frage im Anfänger Forum stellen. Hier würde sie nur unzählige erfahrenere Programmierer nerven.
Zugegeben, es ist eine Anfänger Frage (--> falsches Forum), aber siehe Begründung oben.
 
Dann widersprichst du dir aber gerade irgendwie selber.
Erst sagst du, Anfängern die gerade mit Java anfangen sollte man die Lösung zeigen, damit sie überhaupt einen Weg finden. Dann sagst du aber wir sind hier im allgemeinen Java Forum da siehst du es nicht als deine Aufgabe ihn mit Stücken der Lösung zu füttern.
D.h. du würdest ja immer die Lösung liefern, egal ob Anfänger oder nicht. Was wiederum keinen Sinn macht.

Ich denke gerade auch als Anfänger macht es Sinn auch mal über die Aufgabe nachzudenken und zu wissen was man eigentlich braucht. Vorallem zu verstehen was der eigene Code bisher macht. Wenn man da Probleme hat, kann man hier nachfragen und hier sind genügend Hilfsbereite Leute die einem Antworten.

Zudem seh ich hier häufig Fragen in beiden Forenteilen die jeweils nicht darein gehören. Jeder postet wo er gerade möchte.
 
Und statt "Und was soll diese liefern? Den kleinsten Wert oder den Index des kleinsten Werts im array?" könnte man auch einfach sagen: "Am einfachsten gehst du so vor, dass du zuerst den Index des kleinsten Wertes herausbekommst"

Ich finde jemanden anzuregen zu reflektieren was er gerade tut oder eben nicht tut hilft mehr. Auch wenn derjenige dann mehre Nachfragen stellt oder formuliert wie weit er gekommen ist verfestigt es das Wissen. Man kann auch viel individueller auf den Fragenden eingehen und Verständnisprobleme beseitigen. Wie es aber meist läuft ist, dass jemand eine Lösung schreibt und der Fragende höchstens noch ein Danke da lässt und man ihn ab dann nie wieder im Forum sieht.
 
Dann widersprichst du dir aber gerade irgendwie selber.
Erst sagst du, Anfängern die gerade mit Java anfangen sollte man die Lösung zeigen, damit sie überhaupt einen Weg finden. Dann sagst du aber wir sind hier im allgemeinen Java Forum da siehst du es nicht als deine Aufgabe ihn mit Stücken der Lösung zu füttern.

Inwiefern?
Ich finde das eine widerspricht dem anderen in keinster Weise.
Wenn jemand ganz neu ist, braucht er ein Beispiel. Wenn du mal in einer Mathematik Vorlesung gesessen hast, dann weißt du was ich meine. Mir geht es nicht darum, dass er die Lösung "irgendwann" findet, sondern auch darum, das ganze "effizient" zu gestalten. Wenn er eine Woche am selben Problem sitzt, dann wird seine Motivation sehr stark darunter leiden. Wir wollen Software entwickeln und Probleme lösen und nicht Wochenlang damit beschäftigt sein.
Logischerweise lernt man - immer - auch etwas daran, egal ob man selbst auf die Lösung kam, oder sie auf Stackoverflow findet. Letzendlich geht es nur darum kein Copy & Paste zu betreiben, sondern es eben nur als Beispiel zu sehen. Aber diese Verantwortung trägt ja wohl jeder selbst!
Ich finde wir alle sind reif genug um selbst zu entscheiden, was besser für einem selbst ist.

D.h. du würdest ja immer die Lösung liefern, egal ob Anfänger oder nicht. Was wiederum keinen Sinn macht.

Nein, aber ich unterscheide nach Forum.
Anfänger Forum --> stückweise mit Lösung "füttern"
Allgemeines Java Forum --> direkt die Lösung

Ich gehe davon aus, dass fortgeschrittene Software Entwickler selbst wissen, was gut für sie ist. Und ob man die ganze Lösung haben will oder nur teilweise, kann man ja der Frage entnehmen. Und ich finde dieses Forum ist explizit für fortgeschrittene Themen --> ich richte mich danach.
Falls die Admins von java-forum.org damit andere Absichten hatten, dann bitte ich die Admins, mich zu korrigieren.

Ich denke gerade auch als Anfänger macht es Sinn auch mal über die Aufgabe nachzudenken und zu wissen was man eigentlich braucht. Vorallem zu verstehen was der eigene Code bisher macht. Wenn man da Probleme hat, kann man hier nachfragen und hier sind genügend Hilfsbereite Leute die einem Antworten.

Davon kann man ja erstmal ausgehen. Jeder lernt aber sowieso anders. Die einen brauchen nur ne Definition, die anderen brauchen ein Beispiel. Grundsätzlich sollte jeder mit beidem können, aber für den einen ist das erstere das einfachere, für den anderen das andere.

Zudem seh ich hier häufig Fragen in beiden Forenteilen die jeweils nicht darein gehören. Jeder postet wo er gerade möchte.

Richtig! Das ist viel entscheidender!
Aber ich sehe es nicht als meine Aufgabe an, dies extra zu unterscheiden. Es ist Aufgabe der Moderatoren dieses Forums diese Threads entsprechend zu verschieben, wenn sie es für nötig halten.

Ich finde jemanden anzuregen zu reflektieren was er gerade tut oder eben nicht tut hilft mehr. Auch wenn derjenige dann mehre Nachfragen stellt oder formuliert wie weit er gekommen ist verfestigt es das Wissen.

Wie gesagt, ich gebe euch recht, aber ich sehe das nicht als Aufgabe in diesem Forum an. Dafür gibt es das Anfänger Forum. Wenn man hier schreibt, sollte man bereits in der Lage sein auch ohne äußere Einflüsse zu reflektieren und den Code zu verstehen - aber das ist meine persönliche Meinung.
Auch mit Code Lesen verfestigt man bereits sein Wissen. Mir hat es früher sehr viel geholfen fremden Code zu lesen, zu verstehen, wie andere das Problem angehen. Wenn man immer nur die eigene Lösung betrachtet, schaut man nie über den Tellerrand hinaus. Man kocht sein eigenes Süppchen, aber mit Professionalität hat das wenig zu tun. Da erwartet man dann doch etwas "mehr". Vorallem auch was die Software Architekturen anbelangt, ist es immer ratsam, sich auch anderen Code anzuschauen. So kann man nur besser werden.

Und zu guter letzt:
Informatik ist den meisten deutschen Unis nach eine Ingenieurswissenschaft und keine Naturwissenschaft mehr. Auch wenn noch der Bachelor of Sciene vergeben wird.
Unsere Aufgabe ist es die Dinge anzuwenden und nicht wie Mathematiker oder Physiker neues Grundlagen Wissen zu schaffen. Wir müssen das Rad nicht neu erfinden.

Man kann auch viel individueller auf den Fragenden eingehen und Verständnisprobleme beseitigen.

Habe ich das nicht? Es gibt 1000 Wege nach Rom. Ich habe meine Erfahrung mit ihm geteilt und ihm z.B. gesagt, dass ich erst einmal den Index des niedrigsten Wertes finden würde. Ich bin bei der Lösung auch schrittweise vorgegangen. Klar, nicht so fein-granulat, aber wie gesagt: Das halte ich auch das falsche Forum dafür.

Desweiteren geht es mir auch um Wiederverwendbarkeit. Wenn der nächste User mit demselben Problem ankommt und den Thread über die Suche findet, soll er nicht einen neuen Thread für sein leicht ähnliches Problem eröffnen, sondern eine Lösung vorfinden. Ob er dann Copy & Paste betreibt oder versucht es zu verstehen, liegt in seiner eigenen Verantwortung.
 
Und zu guter letzt:
Informatik ist den meisten deutschen Unis nach eine Ingenieurswissenschaft und keine Naturwissenschaft mehr. Auch wenn noch der Bachelor of Sciene vergeben wird.
Unsere Aufgabe ist es die Dinge anzuwenden und nicht wie Mathematiker oder Physiker neues Grundlagen Wissen zu schaffen. Wir müssen das Rad nicht neu erfinden.

Das sehe ich nicht so. Unsere Aufgabe ist es Technologien (Kontext Informatik) anzuwenden aber auch neue Technologien zu erschaffen (z.B. neue Algorithmen). Informatik ist nicht nur anwenden sondern auch verstehen und optimieren gegebenfalls neu entwickeln.
 
@ssoul26 Jo, das stimmt. Mir geht es aber vielmehr um die Ebene. Wenn du ein Programm entwickelst, schaffst du immer neue Algorithmen. Aber nicht alle sind so Low Level. Niemand käme auf die Idee einen neuen Algorithmus zu erfinden, der das kleinsten Wert zurückgibt. Davon gibt es schon unzählige und optimieren kann man auch nur durch Bäume & Co., die dann wiederum aber den selben Algorithmus anwenden.

Aber noch ein weiteres Beispiel, welches vllt. verständlicher ist:
Als Informatiker musst du theoretisch in der Lage sein eine CPU zu entwerfen und zu bauen. Jetzt ist die Frage, auf welcher Ebene du das tust, ob du z.B. fertige Gatter verwendest, oder ob du diese Gatter erst selbst entwickelst, bis zu den Transistoren runter. Oder komplett neue Bauteile wie Transistoren. Praktisch solltest du auch Elektronik-Kentnisse besitzen (diese werden schließlich im Studium ebenfalls vermittelt) und somit theoretisch alles können, praktisch gibt es dafür aber andere Leute, nämlich die ETler.
Diese übernehmen den Elektronik-Part, während die Informatiker eher auf einer höheren Ebene die CPU entwerfen.
Genauso ist es mit bestimmten Algorithmen. Wenn du in der Navigations-Branche unterwegs bist, wirst du als Informatiker selbst eher selten die ganzen optimierten Algorithmen für die Graphensuche entwickeln. Dafür hat man dann Mathematiker mit Schwerpunkt Informatik in der Firma, die genau diese Schnittstelle bieten und sich um sowas kümmern. Diese gehen dann auch viel theoretischer da ran.

Aber wir sind ehrlich gesagt ganz schön vom Thema abgeschweift. Lasst uns doch bitte mal zum Thema zurückkehren, wir können sowas gerne per PN besprechen.
 

Neue Themen


Zurück
Oben