Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Habn Programm geschrieben , dass ganze , positive Zahlen addiert , und abgesehen davon die 2 größten Zahlen addieren soll ... beim 2. ist das Problem dass er leider immer nur die größte Zahl 2mal addiert statt der größten und der 2.größten ... Jmd ne Idee was ich machen kann ?
Java:
import javax.swing.*;
public class maximum {
public static void main (String args[]){
int n=0;
int sum=0;
int max=0;
do {
sum=sum+n;
max=Math.max(n,n);
String s=JOptionPane.showInputDialog("Bitte Zahl eingeben : " );
n=Integer.parseInt(s);
}while(n>=0);
System.out.println("Die Summe der ganzen positiven Zahlen ist : ");
System.out.println(sum);
System.out.println("Die Summe der beiden größten Zahlen ist : ");
System.out.println(max);
}
}
Wieso nur eine Zahl ? Hab dochn Dialog Popup der erst abbricht wenn eine negative Zahl eingegeben wird ... sagen wir ich geb 5,4,2,2,4,5,10 ein ... dann soll er 5und10 addieren
Aber du speicherst doch nur eine Zahl!
Ich kann mich erinnern dir im anderen Thread geschrieben zu haben "speichere es in einer Liste, wenn du später noch Berechnungen damit anstellen willst", aber....
Hast du dir schon von mir verlinkten Thread angeguckt?
Doch ich habs nicht vergessen , "Java ist auch eine Insel" hatteste mir geschickt ...
Ist mein 2.Programm ohne Vorerfahrung gehabt zu haben bin leicht überfordert , ich les mirs grad nochma durch und versuchs zu checken ^^
Nimm ein Neues Schnipsel auf.
Wenn das Neue grösser als das Grösste ist, wird das Zweitgrösste durch das Grösste ersetzt und das Grösste durch das Neue
Wenn das Neue kleiner als das Grösste aber Grösser als das Zweitgrösste ist, wir das Zweitgrösste durch das Neue ersetzt.
Wenn es keine Neuen mehr gibt das Grösste und das Zweitgrösste zusammenzählen und die Summe ausgeben.
So, jetzt hast du alles was du brauchst
--
Was man so alles tut wenn man auf Resultat warten muss ;-)
Nimm ein Neues Schnipsel auf.
Wenn das Neue grösser als das Grösste ist, wird das Zweitgrösste durch das Grösste ersetzt und das Grösste durch das Neue
Wenn das Neue kleiner als das Grösste aber Grösser als das Zweitgrösste ist, wir das Zweitgrösste durch das Neue ersetzt.
Wenn es keine Neuen mehr gibt das Grösste und das Zweitgrösste zusammenzählen und die Summe ausgeben.
So, jetzt hast du alles was du brauchst
--
Was man so alles tut wenn man auf Resultat warten muss ;-)
Ich hab das Prinzip verstanden , daran liegt es nicht ... Ich habn Array und muss daraus die größte Zahl finden ... Aber ich arbeite in meinem Programm mit JOption.showInputDialog und da wiederum weiß ich nicht wie ich das kombinieren muss ohne dass zich Errors dabei rauskommen ???:L
Was hat denn showInputDialog damit zu tun?
Plan B wäre:
- Die Werte in eine Liste einzulesen
- Liste absteigend sortieren
- die ersten 2 Elemente auslesen.
Jop dass klingt super Kann ich irgendwie besser nachvollziehen :toll:
Java:
import javax.swing.*;
public class maximum {
public static void main (String args[]){
int n=0;
int sum=0;
do {
String t =JOptionPane.showInputDialog("Bitte Zahl eingeben : ");
n=Integer.parseInt(t);
}while(n>=0);
System.out.println("Die Summe der beiden größten Zahlen ist : ");
System.out.println(sum);
}
}
Also ich hab im Moment das hier und komme einfach nicht darüber hinause ... Im Prinzip müssten hier doch die Zahlen die über JOptionPane eingegeben werden abgespeichert sein oder ? Komplett falsch kann der Quelltext doch nicht sein :shock:
darfst du eine ArrayList Collection verwenden?
Wenn nein, muss du ein array verwenden... und du weißt aber vorher nicht wie groß das werden kann.
2 Möglichkeiten..
1: du fragst den Benutzer wie viele zahlen er eingeben willst
2: du nimmst halt mal 1000, so viele wird er ja wohl nicht eingeben wollen.
So natürlich darfst du die zahl nicht n zuweisen sondern ein dein array an der aktuellen stelle... nach eingabe der zahl erhöhst du die aktuelle stelle...
les dir doch schritt für schritt durch was es macht, du setzt n und überschreibst n dann so oft mit einer neuen zahl bis du es mit 0 überschreibst.
du musst es bei jedem durchlauf woanders speichern, wenn du später aus verschiedenen zahlen eine größte zahl finden willst. Ein array bietet sich hier an
import java.util.Arrays;
import javax.swing.JOptionPane;
public class maximum {
public static void main(String args[]) {
int current = 0;
int sum = 0;
int n = 0;
int[] werte = new int[20];//ich nehm halt mal 20
do {
String t = JOptionPane.showInputDialog("Bitte Zahl eingeben : ");
n = Integer.parseInt(t);
werte[current] =n;
current++;
} while (n >= 0);
System.out.println("das sind die werte");
System.out.println(Arrays.toString(werte));
hier bist du dran
System.out.println("Die Summe der beiden größten Zahlen ist : ");
System.out.println(sum);
}
}
[JAVA=22]
} while ((n >= 0) && (current<werte.length));
[/code]
sieht besser aus... nur so für alle Fälle, falls der Benutzer mehr als 20 Zahlen eingeben will
stimmt...
Falls man mit der Collection API von Java arbeiten darf, ist natürlich sowas sinnvoller...
Java:
import java.util.ArrayList;
public class Maximum {
public static void main(String args[]) {
ArrayList<Integer> werte = new ArrayList<Integer>();
do {
String t = JOptionPane.showInputDialog("Bitte Zahl eingeben : ");
werte.add(Integer.parseInt(t));
} while (werte.get(werte.size()-1) >= 0);
Collections.sort(werte);
System.out.println("sum: "+(werte.get(werte.size()-1)+werte.get(werte.size()-2)));
}
}
import java.util.Arrays;
import javax.swing.JOptionPane;
public class maximum {
public static void main(String args[]) {
int current = 0;
int sum = 0;
int n = 0;
int[] werte = new int[20];//ich nehm halt mal 20
do {
String t = JOptionPane.showInputDialog("Bitte Zahl eingeben : ");
n = Integer.parseInt(t);
werte[current] =n;
current++;
} while (n >= 0);
System.out.println("das sind die werte");
System.out.println(Arrays.toString(werte));
hier bist du dran
System.out.println("Die Summe der beiden größten Zahlen ist : ");
System.out.println(sum);
}
}
Kann ich dann ab da einfach das Array das dabei raus kommt absteigend sortieren und dann die ersten beiden Werte addieren ? Die Idee ist doch auch gefallen eben ... funktioniert das so ? oder muss ich wirklich mit Math.max arbeiten , abspeichern und dann nochma Math.max für die 2.größte Zahl ?
Joar, theoretisch kannst du das schon. Die Frage ist, ob du es umsetzen kannst.
Was Math.max damit zu tun hat, weiß ich so auf anhieb nicht (zumindestmal denke ich, dass du es falsch meinst)
mhn wobei wenn ichs mir recht überlege ist das mit der liste und dem array eigentlich gar nicht notwendig....
Java:
import javax.swing.JOptionPane;
public class Maximum {
public static void main(String args[]) {
int n = 0;
int max = -1;
int max2 = -1;
do {
String t = JOptionPane.showInputDialog("Bitte Zahl eingeben : ");
n = Integer.parseInt(t);
if (n > max) {
max2 = max;
max = n;
} else if (n > max2) {
max2 = n;
}
} while (n >= 0);
System.out.println("summe " + max + " und " + max2 + " ist: " + (max + max2));
}
}
geht ja auch so... oder hab ich wo einen denkfehler?
Sollte passen, zumindestmal kam ich im anderen Thread auf eine ähnliche Logik...
Nur warts mal ab, in paar Tagen könnte es heißen, dass man doch die 3 größten Zahlen braucht
Bei der Bedingung dass n größer als max ist , wird max2=max und max=n ausgegeben ? kann mir das noch einer erläutern bitte ? Dann hab ich auch wirklich alles verstanden -.- ... Danke für eure Geduld ...