Grösste Zahl ausgeben

Status
Nicht offen für weitere Antworten.
B

Bernd82

Gast
Hallo
ich will ein Java programm schreiben, welches die grösste Zahl ermittelt. Also es soll ne Folge von zahlen eingeben werden und diese sollen miteinander verglichen werden. Nun habe ich aber gerade absulut keine Idee wie man das am besten macht. Wäre nett wenn mir da einer helfen könnte bzw tipps geben könnte.



Java:
import java.util.Scanner;

public class Folge {
    public static void main(String[] args) {
        System.out.print("Geben Sie eine Folge von ganzen Zahlen" +
        " jeweils durch Leerzeichen getrennt ein.");
        java.util.Scanner input = new java.util.Scanner(System.in);
        String line = input.nextLine(); /
                                        
       java.util.Scanner scanner = new java.util.Scanner(line);
        while (scanner.hasNextInt()) {
        int zahl = scanner.nextInt();
         ;
        }
    }
}
 

eRaaaa

Top Contributor
hmm...da du da sganze ja als string einliest, würde ich das vllt so machen:
(erstmal strings splitten
String[] zahlenStrings = input.nextLine().split("\\p{Space}");
dann das array durchlaufen , in integer umwandeln --->Integer.parseInt(zahlenStrings)
und schauen was maximum ist --> indem du dir immer das macimum merkst und mit der soebend geparsten zahl vergleichst)
 
B

Bernd82

Gast
und wie mach ich das am besten? bzw hab das ja noch nie gemacht und google spuckt mir nicht gerade hilfreiches aus(Bsp etc)
bzw finde ich nur wie ich die maximale Länge einer Liste bekomme
int[] laenge = zahlen1.length

aber das hilft mir nicht unbedingt weiter, ich stehe eigentlich immer noch aufm Schlauch...
 

eRaaaa

Top Contributor
hi,

also nochmal :D

du hast ja jetzt in

line (String line = input.nextLine(); ) einen string der z.b. wie folgt aussehen könnte:

1 12 133 5 34 oder wie auch immer. richtig?
nun musst du ja erstmal diesne string zerlegen. das kannst du mit line.split(). (siehe oben).
das ganze liefert dir ein string array zurück. daher auch String[] zahlenStrings.
da stehen dann also die einzelnen zahlen drin, also
1
12
133
.... allerdings noch als string !!! nicht als zahl.

was du nun machen könntest ist, 1. eine variable initialisieren in der du dir die aktuelle größte zahl merkst und dann eine schleife, von 0 bis < zahlenStrings.length (wie du ja schon richtig ergoogelt hast) durchlaufen, dabei den string in ein integer umwandeln (siehe oben Integer.parseInt(string...);
und diesen mit der aktuellen größten vergleichen, wenn größer, setze max auf aktuelle zahl.

anders wüsst ich jetzt auch nicht wie ichs noch erklären könnte, ohne dir nun den 5 zeilen code aufzuschreiben ;D
 
B

Bernd82

Gast
ne hast du schon verständlich erklärt bzw will ich deinen Code auch nicht wirklich, da ich die ganze Sache hier auch verstehen muss etc, da hilft mir was kopiertes nicht wirklich

werds mal nach deiner "Anleitung" versuchen zu implementieren
 

eRaaaa

Top Contributor
ohne dich jetzt vllt verwirren zu wollen, aber vllt. fängst du auch erstmal klein an.

also, z.b.
was ist hier das maximum
[c]int[] zahlenArray = {11, 44, 22, 33};[/c]
danach das ganze mit einem string array versuchen
[c]String[] zahlenArray = {"11", "44", "22"};[/c]
wenn du das hast, noch mit dem scanner und dem split zusammenbasteln dann haste schon eine lösung. erstmal kleine teilstücke/testprogramme ausprobieren, wenn man das vorher noch nie gemacht hat
 
B

Bernd82

Gast
Java:
public class Max {

  public static int max (int [] numbers) {
    int max=numbers[0];
    int index=0;
    for(int i=1; i<numbers.length;i++) {
      if(max<numbers[i]) { 
    max = numbers[i]; 
    index = i;
      } 
    }
    return index;
  }

  public static void main (String[] args) {
    
     System.out.print("Geben Sie eine Folge von ganzen Zahlen" +
     " jeweils durch Leerzeichen getrennt ein.");
     java.util.Scanner input = new java.util.Scanner(System.in);
     String line = input.nextLine(); 
     java.util.Scanner scanner = new java.util.Scanner(line);
     while (scanner.hasNextInt()) {
         int n = scanner.nextInt();
   
    System.out.println("max=" + max(n));
  }}}

hab mir das jetzt hier gerade zusammengebastelt und komme nun nicht weiter. Der
 

eRaaaa

Top Contributor
ohweia. jetzt muss ich mich bei dir aber entschuldigen :)
ich hab dir hier die ganze zeit einen weg erklärt, der viel zu kompliziert ist, dabei warst du der eig. lösung schon total nah (sorry!)
also der ansatz aus deinem aller ersten post, war schon sehr gut!!! (ich wusste garnicht dass Scanner auch einen string als source benutzen kann)
du kannst dann den teil mit dme array und der extra methode etc. weglassen und sowas würde völlig ausreichen.
Java:
System.out.print("Geben Sie eine Folge von ganzen Zahlen"
				+ " jeweils durch Leerzeichen getrennt ein.");
		java.util.Scanner input = new java.util.Scanner(System.in);
		String line = input.nextLine();
		java.util.Scanner scanner = new java.util.Scanner(line);
		int max = Integer.MIN_VALUE;
		while (scanner.hasNextInt()) {
			int n = scanner.nextInt();
			if (n > max)
				max = n;
		}
		System.out.println(max);

:autsch:
 
B

Bernd82

Gast
danke ;)

bzw war ich in meinem ersten Post auch noch nicht so weit, sondern habe jetzt im nachhinein mich noch mal in einem java doch von balzert belesen und bin dann auf den Code gekommen den ich da gepostet hatte.
Jetzt funktioniert alles wunderbar.

Nur eine Frage noch warum muss int max = Integer.MIN_VALUE; deklarieren?

das ist mir noch nicht so ganz klar.
 

eRaaaa

Top Contributor
das ist die kleinste zahl, die ein int darstellen kann.
falls du deine eingaben kennst, und weisst, dass nur positive werte eingegeben werden, könntest du auch int max = 0 schreiben.
sollen aber auch negative zahlen eingegeben werden, hättest du ein problem, wenn nur negative zahlen dann eingegeben werden und davon die größte bestimmt werden soll (0 wäre ja dann immer größer als deine zahlen, gehört ja aber eig. garnicht zur eingabemenge - daher Integer.MIN_VALUE; ).
man hätte auch gleich die erste zahl nehmen können(vllt sogar besser?):
Java:
int max = scanner.nextInt();
        while (scanner.hasNextInt()) {
            int n = scanner.nextInt();
            if (n > max)
                max = n;
        }
 
B

Bernd82

Gast
dann macht der code von dir schon sinn im bezug auf Integer.MIN_VALUE; denn ich will ja auch negative miteinander vergleichen.
Somit auch die Frage geklärt.
Danke für deine Hilfe.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben