Moin erstmal,
zur Warnung ich bin Anfänger , deswegen könnten schwerwiegende Fehler auftreten . Also ich wollte eine Programm unter Benutzung von Streams schreiben, welche eine Zufallszahl generiert und dann die Summe berechnet. Zum Vergleich hab ich mit der Gaußschen Summenformel das Ergebnis berechnet.
Hier der Code.
Java:
publicstaticvoidmain(String[] args){Stream.Builder<Double> builder =Stream.builder();double n =(Math.random()*3999)+1;//Zufallszahl im Intervall 1-4000for(int i =0; i < n;++i){
builder.add((double) i);}Stream<Double> stream = builder.build();double sum = stream.reduce(0.0,(a,b)-> a + b);//warum musste ich hier die 0 "casten" zu double ?System.out.println(sum);System.out.println((double)(n *(n +1)/2));}
Jetzt wollte ich fragen, ob ich hier richtig mit Streams gearbeitet habe.
Wieso arbeitest Du mit double Zahlen wenn es offensichtlich nur um Integer geht?
Und es ist unnötig, den Stream so mit Zahlen zu erzeugen. IntStream.range oder IntStream.rangeClosed würden hier in Frage kommen.
Oder ein Stream.iterate wäre auch denkbar um den Builder zu vermeiden / die Elemente alle erst so zu erzeugen.
Wieso arbeitest Du mit double Zahlen wenn es offensichtlich nur um Integer geht?
Und es ist unnötig, den Stream so mit Zahlen zu erzeugen. IntStream.range oder IntStream.rangeClosed würden hier in Frage kommen.
Oder ein Stream.iterate wäre auch denkbar um den Builder zu vermeiden / die Elemente alle erst so zu erzeugen.
Das ist eine gute Frage Macht eher weniger Sinn mit double hier zu arbeiten . Werde ich ändern. Hab jetzt mal mit InStream range probiert. Ist ja viel einfacher o_o :
Java:
int n =(int)(Math.random()*3999)+1;System.out.println("Random number:"+ n);IntStream stream =IntStream.range(0, n);int sum = stream.sum();System.out.println("sum:"+ sum);System.out.println("with gauß:"+(double)(n *(n +1)/2));
Was mir jetzt aufgefallen ist: Das Beispiel für Double Werte ist noch nicht gezeigt worden - lediglich ein Hinweis auf Stream.iterate hatte ich ja gebracht. Das kann man also auch noch kurz als ein Beispiel bringen:
Java:
Stream.iterate(1.0, x -> x +1.0).limit(10).forEach(System.out::println);
Das zeigt, wie so ein Stream gebildet werden könnte von Double Zahlen mittels iterate Aufruf. Hier wurde natürlich nicht weiter verarbeitet sondern einfach mal die Zahlen ausgegeben.
Was mir jetzt aufgefallen ist: Das Beispiel für Double Werte ist noch nicht gezeigt worden - lediglich ein Hinweis auf Stream.iterate hatte ich ja gebracht. Das kann man also auch noch kurz als ein Beispiel bringen:
Java:
Stream.iterate(1.0, x -> x +1.0).limit(10).forEach(System.out::println);
Das zeigt, wie so ein Stream gebildet werden könnte von Double Zahlen mittels iterate Aufruf. Hier wurde natürlich nicht weiter verarbeitet sondern einfach mal die Zahlen ausgegeben.