Java Zahl finden < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Aufgabe | JAVA: Finde eine Methode zu auffinde der größten Zahl auf einer Reihe (nicht näher definiert ob aus Array oder anderen Quellen). |
Hallo!
Hab irgendwie einen falschen Ansatz. Benötige einen Java-Code um aus einer Reihe von Zahlen die Größe herauszufinden. Hätte sie gerne von der Tastatur eingelesen und bei 0 die Schleife beendet und das Max ausgegeben. (bin für alle Infos dankbar - auch für stilistische Korrekturen)
Danke im Voraus
LG
import java.util.Scanner;
public class main {
public static int maxfinder (int a)
{
int max;
if (a > max)
{
max = a;
}
return max;
}
public static void main(String[] args) {
int zahl = 0;
int max = 0;
Scanner sc = new Scanner(System.in);
System.out.print("Bitte gib eine Zahl ein");
zahl = sc.nextInt();
max = maxfinder (zahl);
Scanner sc = new Scanner(System.in);
System.out.print("Bitte gib eine Zahl ein oder 0 für Ende");
zahl = sc.nextInt();
if (zahl != 0 && zahl > max)
{
max = maxfinder (zahl);
}
System.out.println (max);
}
}
|
|
|
|
Hallo martin_vie,
> JAVA: Finde eine Methode zu auffinde der größten Zahl auf
> einer Reihe (nicht näher definiert ob aus Array oder
> anderen Quellen).
> Hallo!
>
> Hab irgendwie einen falschen Ansatz. Benötige einen
> Java-Code um aus einer Reihe von Zahlen die Größe
> herauszufinden. Hätte sie gerne von der Tastatur
> eingelesen und bei 0 die Schleife beendet und das Max
> ausgegeben. (bin für alle Infos dankbar - auch für
> stilistische Korrekturen)
>
> Danke im Voraus
>
> LG
>
> import java.util.Scanner;
>
> public class main {
>
> public static int maxfinder (int a)
> {
> int max;
>
> if (a > max)
> {
> max = a;
> }
>
> return max;
> }
>
>
> public static void main(String[] args) {
>
> int zahl = 0;
> int max = 0;
>
>
> Scanner sc = new Scanner(System.in);
> System.out.print("Bitte gib eine Zahl ein");
Hier kann das Einlesen, solange wiederholt werden,
bis ein Integer ermittelt werden kann.
> zahl = sc.nextInt();
>
> max = maxfinder (zahl);
>
> Scanner sc = new Scanner(System.in);
> System.out.print("Bitte gib eine Zahl ein oder 0 für
> Ende");
Besser ist hier eine Abfrage mit sc.hasNextInt().
Falls das true ergibt, dann weiter im Code.
> zahl = sc.nextInt();
>
> if (zahl != 0 && zahl > max)
> {
> max = maxfinder (zahl);
Da die Variable "max" auch eine Variable in maxfinder ist,
wird hier nicht die Variable max von "main" verwendet.
Ausweg ist, "maxfinder" zwei Parameter zu übergeben,
oder eben die Variable max als global zu deklarieren.
> }
> System.out.println (max);
> }
> }
>
Gruss
MathePower
|
|
|
|
|
Danke MathePower!
Hab es jetzt verändert und läuft auch, muss aber jetzt zu Beginn zwei Zahlen eingeben. Kann mir jemand sagen wieso?
Danke! LG
import java.util.Scanner;
public class main {
static int max = 0;
public static int maxfinder (int a)
{
if (a > max)
{
max = a;
}
return max;
}
public static void main(String[] args) {
int zahl = 0;
Scanner sc = new Scanner(System.in);
System.out.print("Bitte gib eine Zahl [mm] ein\n");
[/mm]
zahl = sc.nextInt();
max = maxfinder (zahl);
while (sc.hasNextInt())
{
System.out.print("Bitte gib eine weiter Zahl [mm] ein\n");
[/mm]
zahl = sc.nextInt();
if (zahl > max)
{
max = maxfinder (zahl);
}
}
System.out.println (max);
}
}
|
|
|
|
|
Aufgabe 1 | Finde größte Zahl |
Aufgabe 2 | Methode zur Auffindung der zweitgrößten Zahl. |
Habe einen Code zu Auffindung der zweitgrößten Zahl geschrieben.
Leider gibt er mir für die größte (big) und zweitgrößte (sec) Zahl Null zurück.
static int big;
static int sec;
public static int findersec (int a)
{
if (a > sec && a < big)
{
sec = a;
}
if (a > big)
{
a = big;
}
return sec;
}
public static void main(String[] args) {
int zahl;
Scanner sc = new Scanner(System.in);
System.out.println("Bitte gib eine Zahl [mm] ein\n");
[/mm]
while (sc.hasNextInt())
{
System.out.println("Bitte gib eine weiter Zahl [mm] ein\n");
[/mm]
zahl = sc.nextInt();
sec = findersec (zahl);
}
System.out.println(sec);
}
Danke!
LG
|
|
|
|
|
Hallo!
Welchen Wert haben die beiden Variablen sec und big denn am Anfang? Wenn beide =0 sind, können deine IF-Abfragen niemals feuern.
Ich würde vorerst für beide Werte sehr große, negative Zahlen benutzen.
Außerdem ist
a = big;
falsch, du willst es umgekehrt. In der anderen if-Abfrage ebenso.
Und: Wenn a>big ist, wird big=a. Soweit korrekt, aber dabei geht der bisherige Wert von big verloren. Dabei ist der doch danach der neue zweitgrößte Wert. Da fehlt also noch was.
|
|
|
|
|
Hallo!
Du hast die erste "Bitte geben sie eine Zahl ein"-Anweisung, und dann nocheine zweite in der while-Schleife.
Statt
while(){
}
könntest du
do{
}while()
verwenden. Das erste überprüft zuerst, ob die Schleife (erstmals/nochmal) abgearbeitet werden soll, das zweite überprüft das erst nach dem Durchlauf, d.h. die Schleife wird mindestens 1x durchlaufen.
und:
if (zahl > max)
{
max = maxfinder (zahl);
}
Wozu die if-Abfrage? Das macht der maxfinder doch selbst!
|
|
|
|
|
Hallo!
Danke für die Hinweise, hab ihn jetzt so verändert.
Trotzdem verlangt er nach dem ersten "Bitte gib eine weitere Zahl ein" zwei Zahlen. Kann mir das vielleicht jemand erklären wieso? Kann es leider nicht nachvollziehen.
Zweites Problem: Wenn ich als Abbruchbedingung nur die Enter-Taste ohne Zahl eingebe funktioniert es nicht. Wie kann ich es dahingehen optimieren
?
Nebenfrage: Kann man sich in Eclipse beim Compilen den Wert der Variabeln auch anzeigen lassen (so wie bei Xcode oder Visual Studio)?
Danke!
LG
import java.util.Scanner;
public class main {
static int max = 0;
public static int maxfinder (int a)
{
if (a > max)
{
max = a;
}
return max;
}
public static void main (String[] args) {
int zahl = 0;
Scanner sc = new Scanner(System.in);
System.out.print("Bitte gib eine Zahl [mm] ein\n");
[/mm]
zahl = sc.nextInt();
do
{
System.out.print("Bitte gib eine weitere Zahl [mm] ein\n");
[/mm]
zahl = sc.nextInt();
max = maxfinder (zahl);
}
while (sc.hasNextInt());
System.out.println (max);
}
}
|
|
|
|
|
Hallo!
Du hast die Abfrage immernoch zwei mal drin: zunächst in Zeile 24/25, und danach springt der Computer in die Schleife, und führt zunächst Zeile 29/30 aus. Du solltest die Zeilen 24/25 löschen, dann ist das Problem behoben.
Das andere Problem ist, daß du zwingend versuchst, mit nextInt() eine Zahl einzulesen. Wenn es keine weitere Zahl gibt, wird der Computer sich beschweren. Hier solltest du nach der Eingabe mit hasInt() testen, ob da überhaupt ne Zahl kommt.
1: |
| 2: | import java.util.Scanner;
| 3: |
| 4: | public class main {
| 5: |
| 6: | static int max = 0;
| 7: |
| 8: | public static int maxfinder (int a)
| 9: | {
| 10: | if (a > max)
| 11: | {
| 12: | max = a;
| 13: | }
| 14: | return max;
| 15: | }
| 16: |
| 17: |
| 18: | public static void main (String[] args) {
| 19: |
| 20: | int zahl = 0;
| 21: |
| 22: | Scanner sc = new Scanner(System.in);
| 23: |
| 24: | System.out.print("Bitte gib eine Zahl ein\n");
| 25: | zahl = sc.nextInt();
| 26: |
| 27: | do
| 28: | {
| 29: | System.out.print("Bitte gib eine weitere Zahl ein\n");
| 30: | zahl = sc.nextInt();
| 31: | max = maxfinder (zahl);
| 32: | }
| 33: | while (sc.hasNextInt());
| 34: |
| 35: | System.out.println (max);
| 36: | }
| 37: | }
|
|
|
|
|
|
Hallo!
Hätte den Code jetzt auch noch gerne so verändert, dass man die Zahlen aus einem Array einliest. Steck leider noch ein bisschen fest. Das die Passagen mit maxfinder (zahl); und while (zahl.length); nicht stimmen ist mir klar, weiß aber nicht was an an dieser Stelle schreiben soll.
Danke!
LG
import java.util.Scanner;
public class main {
static int max = 0;
public static int maxfinder (int a)
{
if (a > max)
{
max = a;
}
return max;
}
public static void main (String[] args) {
int [] zahl = {1,2,3,4,5} ;
do
{
maxfinder (zahl);
}
while (zahl.length);
System.out.println (max);
}
}
|
|
|
|
|
Hi!
Für sowas verwendet man eine For-Schleife:
for(int i=0; i<zahl.length; i++){
// das i. Element von zahl bekommst du hier nun mit zahl[i]
}
|
|
|
|