<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Java]]></title><description><![CDATA[Plattformunabhängige Programmierung basierend auf dem aktuellen SDK. Einbindung von systemabhängigem Code in Java, Java-Swing, RMI, Reflection und natürlich objektorientierte Programmierung mit Java. **Kein JavaScript!**]]></description><link>https://www.c-plusplus.net/forum/category/60</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 11:24:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/category/60.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Feb 2012 13:26:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Openbook: Java 7 - Mehr als eine Insel]]></title><description><![CDATA[Java 7 - Mehr als eine Insel kostenlos als Openbook
Ab sofort veröffentlicht Galileo Computing neben dem Standardwerk der Java-Programmierung &quot;Java ist auch eine Insel&quot; auch den zweiten Band von Christian Ullenboom &quot;Java 7 – Mehr als eine Insel&quot; als kostenloses Openbook.
Dieses Buch beschäftigt sich nicht mit den Grundlagen der Java-Programmierung, sondern unterstützt erfahrene Java-Programmierer bei der täglichen Arbeit mit den Java SE-Bibliotheken. Am Beispiel konkreter Java-Projekte zeigt Christian Ullenboom, was man wissen muss über Swing, Netzwerk- und Grafikprogrammierung, RMI und Web-Services, JavaServer Pages und Servlets, Applets, JDBC, Reflection und Annotationen, Logging und Monitoring, Java Native Interface (JNI) und vieles mehr. Das Buch ist eine wertvolle Java-Wissensquelle.
Die HTML-Version kann bequem im Browser gelesen werden. Das gedruckte Buch ist im Buchhandel erhältlich und kostet 49,90 Euro (ISBN 978-3-8362-1507-7).
________________________________________________
Link zum Openbook
________________________________________________
Openbook: Java 7 - Mehr als eine Insel
http://openbook.galileocomputing.de/java7/
________________________________________________
Das gedruckte Buch
________________________________________________
Java 7 - mehr als eine Insel | ISBN: 9783836215077Java 7 – Mehr als eine Insel
Christian Ullenboom
Galileo Computing
1.433 Seiten, 2011, gebunden
49,90 Euro, ISBN 978-3-8362-1507-7
http://www.galileocomputing.de/2253
]]></description><link>https://www.c-plusplus.net/forum/topic/300290/openbook-java-7-mehr-als-eine-insel</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/300290/openbook-java-7-mehr-als-eine-insel</guid><dc:creator><![CDATA[Marc++us]]></dc:creator><pubDate>Wed, 29 Feb 2012 13:26:47 GMT</pubDate></item><item><title><![CDATA[Java ist auch eine Insel – Das Standardwerk zur Java-Programmierung kostenlos als Openbook! (10. Auflage)]]></title><description><![CDATA[Es gibt jetzt die 11. Auflage aktuell zu Java 8.
]]></description><link>https://www.c-plusplus.net/forum/topic/295047/java-ist-auch-eine-insel-das-standardwerk-zur-java-programmierung-kostenlos-als-openbook-10-auflage</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/295047/java-ist-auch-eine-insel-das-standardwerk-zur-java-programmierung-kostenlos-als-openbook-10-auflage</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 07 Aug 2014 09:56:50 GMT</pubDate></item><item><title><![CDATA[Anzahl der Permutationen verringern?]]></title><description><![CDATA[@Lennox sagte in Anzahl der Permutationen verringern?:

@Belli sagte in Anzahl der Permutationen verringern?:

Ich glaube, es ist umgekehrt: Man mag Dich nicht, weil Du denkst, was Du sagst.

Das ergibt keinen Sinn. Aber Logik war noch nie eure Stärke.

Na dann eben doch. War ja nur eine Frage der Zeit. Hat dieses Mal erstaunlich lange gehalten. Bis zum nächsten Account.
]]></description><link>https://www.c-plusplus.net/forum/topic/355425/anzahl-der-permutationen-verringern</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355425/anzahl-der-permutationen-verringern</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 09 Jan 2026 17:06:07 GMT</pubDate></item><item><title><![CDATA[XML aus PDF extrahieren]]></title><description><![CDATA[@Schlangenmensch sagte in XML aus PDF extrahieren:

@john-0 In dem Fall ist das aber genau dafür gedacht. Der PDF Teil ist für den Kunden zum lesen/drucken, was auch immer und ein eingebettetes XML für die elektronische Weiterverarbeitung der Rechnung.

XFA war nur eine proprietäre Erweiterung von Adobe, und wurde nie in die ISO Norm übernommen. Mit PDF 2.0 ist auch das Geschichte.
]]></description><link>https://www.c-plusplus.net/forum/topic/355341/xml-aus-pdf-extrahieren</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355341/xml-aus-pdf-extrahieren</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Mon, 25 Aug 2025 13:10:06 GMT</pubDate></item><item><title><![CDATA[IntelliJ: externes Tool oder Skript direkt vor einem Build ausführen?]]></title><description><![CDATA[Ich habe einem &quot;Buildnumber Counter&quot;, der BuildNumber &amp; Zeitpunkt in den Code einfügt. Kann ich den mit IntelliJ automatisch aufrufen lassen, bevor ich zB. das ausführbare JAR erzeugen lasse?
Im Internet finde ich nichts dazu. 
]]></description><link>https://www.c-plusplus.net/forum/topic/355328/intellij-externes-tool-oder-skript-direkt-vor-einem-build-ausführen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355328/intellij-externes-tool-oder-skript-direkt-vor-einem-build-ausführen</guid><dc:creator><![CDATA[Foulpelz]]></dc:creator><pubDate>Sun, 29 Jun 2025 17:36:47 GMT</pubDate></item><item><title><![CDATA[Ist das Verfahren allgemeingültig?]]></title><description><![CDATA[Der erfolgreichste Run seit langem, aber jetzt fängt er wieder an, zu cyborgbetatisieren.
]]></description><link>https://www.c-plusplus.net/forum/topic/355135/ist-das-verfahren-allgemeingültig</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/355135/ist-das-verfahren-allgemeingültig</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 19 Nov 2024 12:58:36 GMT</pubDate></item><item><title><![CDATA[Einfacher CLI-E-Mail-Client mit mehreren Accounts]]></title><description><![CDATA[Na ja, man sollte sich schon vorher entscheiden, was man will: async (parallel) oder sync (parallel) ...  Beides zusammen ist nur so semi gut ...
Außerdem wäre bei wait und notify(All) das A und O, das Conditional-Wait, das heißt, man braucht noch eine zusätzliche Bedingung, auf die man wartet.
Bei der CyclicBarrier ist dies jedoch nicht so und sie kann auch wiederverwendet werden.  Thema gelöst.
]]></description><link>https://www.c-plusplus.net/forum/topic/354870/einfacher-cli-e-mail-client-mit-mehreren-accounts</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354870/einfacher-cli-e-mail-client-mit-mehreren-accounts</guid><dc:creator><![CDATA[noLust]]></dc:creator><pubDate>Sat, 27 Jul 2024 20:25:00 GMT</pubDate></item><item><title><![CDATA[Was macht diese Funktion?]]></title><description><![CDATA[Vermutlich nur ein weiterer Account von Martin gewesen ...
]]></description><link>https://www.c-plusplus.net/forum/topic/354631/was-macht-diese-funktion</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354631/was-macht-diese-funktion</guid><dc:creator><![CDATA[omggg]]></dc:creator><pubDate>Mon, 20 May 2024 09:52:46 GMT</pubDate></item><item><title><![CDATA[Stock price forecasting mit LSTM in Java]]></title><description><![CDATA[@omggg sagte in Stock price forecasting mit LSTM in Java:

Hast du noch Lust, etwas präziser auf meine Frage(n) zu antworten? Oder führt kein Weg mehr an Python vorbei?

Eine kleine Vorgeschichte: Ich stöbere privat seit einiger Zeit durch das Buch &quot;Machine Learning mit Python und Scikit-Learn und TensorFlow&quot;. Und dieses Buch zeigte mir eine etwas andere Sichtweise auf Maschine Learning. Vorher dachte ich &quot;Viele Daten rein, trainieren und gut ist es&quot;. Nun achte ich aber andere Dinge wie Korrelationen, Overfitting, hoher Bias, usw
Vorauf ich hinaus möchte ist folgendes: Ich kenne KI nur in Verbindung mit Python. Wohl aber gibt es einige Module bzw. Bibliotheken welche ich nicht missen möchte.
Und das fängt mit scikit-learn an. Dieses Modul ist groß und besteht aus unterschiedlichern Klassifiern, Vorverarbeitungen (z.B. sklearn.preprocessing.StandardScaler), Batches,... Da ist halt alles dabei, was man nicht generell von anderen Github Projekten sagen kann.
Von daher würde ich beim Maschine Learning darauf achten dass man entweder scikit-learn oder TensorFlow nutzt. Andere Libs dieser Größenordnungen kenne ich nicht. Und ferner würde ich das oben genannte Buch empfehlen.
Python muss nicht sein, ist aber sehr praktisch. Ein Aufruf von &quot;pip install scikit-learn&quot; und innerhalb kurzer Zeit ist scikit-learn Und das ist eine schöne Sache an Python.
]]></description><link>https://www.c-plusplus.net/forum/topic/354563/stock-price-forecasting-mit-lstm-in-java</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354563/stock-price-forecasting-mit-lstm-in-java</guid><dc:creator><![CDATA[Quiche Lorraine]]></dc:creator><pubDate>Wed, 13 Mar 2024 09:29:45 GMT</pubDate></item><item><title><![CDATA[mexc api in Java]]></title><description><![CDATA[@_ro_ro sagte in mexc api in Java:

Schönen Sonntag!

Danke, Dir auch! Vielleicht liest man sich später noch mal. 
]]></description><link>https://www.c-plusplus.net/forum/topic/354534/mexc-api-in-java</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354534/mexc-api-in-java</guid><dc:creator><![CDATA[omggg]]></dc:creator><pubDate>Sun, 11 Feb 2024 12:44:03 GMT</pubDate></item><item><title><![CDATA[Gibt es ein &quot;Methodenaufrufsdiagramm&quot;?]]></title><description><![CDATA[Gut, Graphviz Dot wäre nicht das Problem. Die Frage wäre, ob neben dem Lesen der Docstrings Doxygen auch die Syntax und Semantik von Java verstehen kann, sprich auch einen Graph eines UML -Diagramms erstellen könnte... Wahrscheinlich nicht und dann nützt es mir nichts.
... Oder geschieht das Parsen komplett über die Docstrings?
]]></description><link>https://www.c-plusplus.net/forum/topic/354532/gibt-es-ein-methodenaufrufsdiagramm</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354532/gibt-es-ein-methodenaufrufsdiagramm</guid><dc:creator><![CDATA[omggg]]></dc:creator><pubDate>Mon, 05 Feb 2024 20:56:17 GMT</pubDate></item><item><title><![CDATA[Animated WEBP decoder (in pure Java)]]></title><description><![CDATA[Hello friends, I need to extract single frames from animated webp files without having to rely on &quot;native&quot; libraries. Should run on any platform that supports Java.
Can someone help me? Thanx in advance.
-- Temporary
]]></description><link>https://www.c-plusplus.net/forum/topic/354423/animated-webp-decoder-in-pure-java</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354423/animated-webp-decoder-in-pure-java</guid><dc:creator><![CDATA[temporary]]></dc:creator><pubDate>Wed, 06 Dec 2023 03:14:46 GMT</pubDate></item><item><title><![CDATA[Geldscheineautomat... wie &quot;depth&quot; festlegen?]]></title><description><![CDATA[Die Aufgabe lautet:
Ein Automat gibt Geldscheine mit folgenden Geldscheinewerten aus: {5, 30, 35, 40, 150, 200}
Der Benutzer soll wiederholt einen ohne Rest durch 5 teilbaren Betrag eingeben können.
Die dem Betrag entsprechende Stückelung mit der kleinstmöglichen Anzahl an Geldscheinen soll ausgegeben werden.
Implementierungsdetail: Rekursive Aufrufe dürfen nicht verwendet werden.
Zuerst dachte ich an einen ganz einfachen Ansatz:
    public static int[] stueckeln1(int betrag) {
        int[] scheine = {200, 100, 50, 20, 10, 5};
        int[] result = {0, 0, 0, 0, 0, 0};
        for (int i = 0; i &lt; scheine.length; i++) {
            result[i] = betrag / scheine[i];
            betrag = betrag % scheine[i];
        }
        return result;
    }

Bis ish dann merkte, dass das mit {5, 30, 35, 40, 150, 200} nicht klappt.
Deshalb hab ich dann einen anderen Ansatz genommen, wobei ich aber nicht weiß, wie depth (Zeile 3) gewählt werden muss:
    public static int[] stueckeln2(int betrag) {
        int[] scheine = {5, 30, 35, 40, 150, 200};
        int depth = Math.min(betrag / scheine[0] + 1, 50);
        int[] indexes = new int[scheine.length];

        int bestCounter = Integer.MAX_VALUE;
        int[] bestResult = new int[scheine.length];

        a:
        for (int i = 0; ; ) {
            int counter = 0;
            int sum = 0;
            for (int j = 0; j &lt; indexes.length; j++) {
                counter += indexes[j];
                sum += indexes[j] * scheine[j];
            }
            if (betrag - sum &lt;= 0) {
                if (betrag - sum == 0 &amp;&amp; counter &lt;= bestCounter) {
                    bestCounter = counter;
                    System.arraycopy(indexes, 0, bestResult, 0, indexes.length);
                }
                indexes[i] = depth - 1;
            }

            indexes[i]++;
            if (indexes[i] == depth) {
                while (indexes[i] == depth) {
                    indexes[i] = 0;
                    i++;
                    if (i == indexes.length) {
                        break a;
                    }
                }
                indexes[i]++;
                i = 0;
            }
        }

        return bestResult;
    }

Womöglich ist aber auch meine Herangehensweise falsch. 
]]></description><link>https://www.c-plusplus.net/forum/topic/354368/geldscheineautomat-wie-depth-festlegen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354368/geldscheineautomat-wie-depth-festlegen</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 28 Oct 2023 19:37:48 GMT</pubDate></item><item><title><![CDATA[Was bedeutet das Schlüsselwort &#96;transient&#96; in Java?]]></title><description><![CDATA[Danke, dann macht es ja gar keinen Sinn, dieses in nicht-serialisierbaren Klassen zu verwenden.
@Finnegan sagte in Was bedeutet das Schlüsselwort &amp;#x60;transient&amp;#x60; in Java?:

Ist es echt nicht möglich, das selbst zu recherchieren?

Zu spät bemerkt.  
]]></description><link>https://www.c-plusplus.net/forum/topic/354263/was-bedeutet-das-schlüsselwort-transient-in-java</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354263/was-bedeutet-das-schlüsselwort-transient-in-java</guid><dc:creator><![CDATA[cyborg_beta]]></dc:creator><pubDate>Sat, 19 Aug 2023 22:34:37 GMT</pubDate></item><item><title><![CDATA[Laufzeit-Polymorphie unterstützende Sprachen]]></title><description><![CDATA[@cyborg_beta sagte in Laufzeit-Polymorphie unterstützende Sprachen:

      54: invokevirtual #49                 // Method add:(Ljava/lang/Object;Ljava

Interessant wäre nun zu wissen, an welcher Stelle die (dynamische) Laufzeit-Polymorphie hier greift. Da bin ich unsicher.

Ich hab auch nur wenig Ahnung von Java, aber wenn ich raten müsste, dann überall dort, wo die VM-Instruktion invokevirtual ausgeführt wird. Der Begriff Virtuelle Funktion/Methode ist schliesslich nicht C++-spezifisch, auch wenn Java im Gegensatz zu C++ kein virtual-Schlüsselwort hat.
]]></description><link>https://www.c-plusplus.net/forum/topic/354261/laufzeit-polymorphie-unterstützende-sprachen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354261/laufzeit-polymorphie-unterstützende-sprachen</guid><dc:creator><![CDATA[Finnegan]]></dc:creator><pubDate>Sat, 19 Aug 2023 19:23:47 GMT</pubDate></item><item><title><![CDATA[Multi-Charts: Wie mit 0-Werten umgehen?]]></title><description><![CDATA[Hab es jetzt hinbekommen, mit einer zusätzlichen Liste, die sich alle bereits bekannten Assetnames &quot;merkt&quot;.
Mh, hat das Forum zufällig eine Funktion, um zwei Texte/Codes zu diffen? Das wäre super, um die Unterschiede sichtbar zu machen ...
package org.example;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.webcerebrium.binance.api.BinanceApi;
import com.webcerebrium.binance.api.BinanceApiException;
import com.webcerebrium.binance.datatype.BinanceWalletAsset;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.DoubleSummaryStatistics;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

public class Main {
    public static final String DIR_NAME = &quot;website/json-data/&quot;;
    private static final ArrayList&lt;String&gt; KNOWN_ASSET_NAMES = new ArrayList&lt;&gt;();

    public record MyAsset(
            long time1,
            String pair,
            BigDecimal free,
            BigDecimal locked,
            BigDecimal price,
            BigDecimal usd) {}

    public static void initKnownAssetNames() {
        HashSet&lt;String&gt; assetNames = new HashSet&lt;&gt;();
        File dir = new File(DIR_NAME);
        File[] files = dir.listFiles();
        assert files != null;
        for (File file : files) {
            String fn = file.getName();
            if (fn.endsWith(&quot;USDT.json&quot;)) {
                assetNames.add(fn.substring(0, fn.indexOf(&quot;USDT.json&quot;)));
            }
        }
        KNOWN_ASSET_NAMES.clear();
        KNOWN_ASSET_NAMES.addAll(assetNames);
    }

    public static BinanceApi getApi() throws BinanceApiException, Exception {
        File file = new File(&quot;my_api.txt&quot;);
        if (!file.exists()) {
            return new BinanceApi();
        }
        String key, secret;
        try (BufferedReader br =
                new BufferedReader(new FileReader(file, Charset.defaultCharset()))) {
            key = br.readLine();
            secret = br.readLine();
        }
        return new BinanceApi(key, secret);
    }

    public static JsonArray getJsonArray(File fn) throws IOException {
        if (fn.exists()) {
            try (BufferedReader br =
                    new BufferedReader(new FileReader(fn, Charset.defaultCharset()))) {
                return new JsonParser().parse(br).getAsJsonArray();
            }
        } else {
            return new JsonArray();
        }
    }

    public static Map&lt;String, MyAsset&gt; collect() throws BinanceApiException, Exception {
        BinanceApi api = getApi();
        Map&lt;String, BinanceWalletAsset&gt; balances = api.balancesMap();
        Map&lt;String, BigDecimal&gt; prices = api.pricesMap();
        Map&lt;String, MyAsset&gt; newBalances = new HashMap&lt;&gt;();
        final long t1 = System.currentTimeMillis();
        for (BinanceWalletAsset bwa : balances.values()) {
            if (!bwa.getAsset().equals(&quot;USDT&quot;)) {
                if (bwa.getFree().compareTo(BigDecimal.ZERO) &gt; 0) {
                    if (!KNOWN_ASSET_NAMES.contains(bwa.getAsset())) {
                        KNOWN_ASSET_NAMES.add(bwa.getAsset());
                    }
                }
                if (KNOWN_ASSET_NAMES.contains(bwa.getAsset())) {
                    String pair = bwa.getAsset() + &quot;USDT&quot;;
                    if (prices.containsKey(pair)) {
                        BigDecimal free = bwa.getFree();
                        BigDecimal locked = bwa.getLocked();
                        BigDecimal price = prices.get(pair);
                        BigDecimal usd = free.add(locked).multiply(price);
                        newBalances.put(pair, new MyAsset(t1, pair, free, locked, price, usd));
                    }
                }
            }
        }
        System.out.println(&quot;newBalances = &quot; + newBalances);
        return newBalances;
    }

    public static void writeJson(Map&lt;String, MyAsset&gt; newBalances) throws IOException {
        long time1 = newBalances.values().stream().findFirst().orElseThrow().time1();
        {
            JsonArray sums = getJsonArray(new File(DIR_NAME + &quot;sums.json&quot;));
            float sum = 0;
            for (MyAsset ma : newBalances.values()) {
                sum += ma.usd().floatValue();
            }
            JsonObject o = new JsonObject();
            o.addProperty(&quot;x&quot;, time1);
            o.addProperty(&quot;y&quot;, sum);
            sums.add(o);
            try (FileWriter fw = new FileWriter(DIR_NAME + &quot;sums.json&quot;, Charset.defaultCharset())) {
                fw.write(sums.toString());
            }
        }

        for (MyAsset ma : newBalances.values()) {
            JsonArray data = getJsonArray(new File(DIR_NAME + ma.pair() + &quot;.json&quot;));
            JsonObject o = new JsonObject();
            o.addProperty(&quot;x&quot;, time1);
            o.addProperty(&quot;y&quot;, ma.usd().floatValue());
            data.add(o);
            try (FileWriter fw =
                    new FileWriter(DIR_NAME + ma.pair() + &quot;.json&quot;, Charset.defaultCharset())) {
                fw.write(data.toString());
            }
        }
    }

    public static void normalizeJsonData() throws IOException {
        final long one_hour = 1000 * 60 * 60;
        final long two_hours = 1000 * 60 * 60 * 2;
        File dir = new File(DIR_NAME);
        File[] files = dir.listFiles();
        assert files != null;
        for (File file : files) {
            JsonArray array = getJsonArray(file);
            long start =
                    array.get(0).getAsJsonObject().get(&quot;x&quot;).getAsLong() / two_hours * two_hours;
            long stop = start + two_hours;
            List&lt;List&lt;JsonObject&gt;&gt; chunks = new ArrayList&lt;&gt;();
            List&lt;JsonObject&gt; newChunks = new ArrayList&lt;&gt;();
            Iterator&lt;JsonElement&gt; iterator1 = array.iterator();
            while (iterator1.hasNext()) {
                JsonObject jo = iterator1.next().getAsJsonObject();
                long x = jo.get(&quot;x&quot;).getAsLong();
                if (x &gt;= start &amp;&amp; x &lt; stop) {
                    newChunks.add(jo);
                } else {
                    chunks.add(newChunks);
                    newChunks = new ArrayList&lt;&gt;();
                    newChunks.add(jo);
                    start = stop;
                    stop = stop + two_hours;
                }
                if (!iterator1.hasNext()) {
                    // last element
                    chunks.add(newChunks);
                }
            }

            JsonArray newArray = new JsonArray();
            Iterator&lt;List&lt;JsonObject&gt;&gt; iterator2 = chunks.iterator();
            while (iterator2.hasNext()) {
                List&lt;JsonObject&gt; chunk = iterator2.next();
                if (iterator2.hasNext()) {
                    // not last element
                    DoubleSummaryStatistics statistics =
                            chunk.stream()
                                    .mapToDouble(jo -&gt; jo.get(&quot;y&quot;).getAsFloat())
                                    .summaryStatistics();
                    double min = statistics.getMin();
                    double max = statistics.getMax();
                    double avr = statistics.getAverage();
                    double newY = Math.abs(min - avr) &gt;= Math.abs(max - avr) ? min : max;
                    long newX =
                            chunk.get(0).getAsJsonObject().get(&quot;x&quot;).getAsLong()
                                            / two_hours
                                            * two_hours
                                    + one_hour;
                    JsonObject newObj = new JsonObject();
                    newObj.addProperty(&quot;x&quot;, newX);
                    newObj.addProperty(&quot;y&quot;, (float) newY);
                    newArray.add(newObj);
                } else {
                    // last element
                    for (JsonObject jo : chunk) {
                        newArray.add(jo);
                    }
                }
            }

            try (FileWriter fw = new FileWriter(file, Charset.defaultCharset())) {
                fw.write(newArray.toString());
            }
        }
    }

    public static void main(String[] args) {
        if (!new File(DIR_NAME).exists()) {
            System.out.println(&quot;new File(DIR_NAME).mkdir() = &quot; + new File(DIR_NAME).mkdir());
        }
        initKnownAssetNames();
        Timer timer = new Timer();
        timer.schedule(
                new TimerTask() {
                    @Override
                    public void run() {
                        try {
                            Map&lt;String, MyAsset&gt; newBalances = collect();
                            writeJson(newBalances);
                            normalizeJsonData();
                        } catch (BinanceApiException | Exception e) {
                            e.printStackTrace();
                            System.err.println(e.getMessage());
                        }
                    }
                },
                0,
                1000 * 60 * 30);
    }
}


KNOWN_ASSET_NAMES ist neu.
]]></description><link>https://www.c-plusplus.net/forum/topic/354198/multi-charts-wie-mit-0-werten-umgehen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354198/multi-charts-wie-mit-0-werten-umgehen</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 15 Jul 2023 16:54:22 GMT</pubDate></item><item><title><![CDATA[Vier ineinander geschachtelte for-Schleifen beschleunigen, Polygone finden]]></title><description><![CDATA[Ich hab noch ein wenig gefummelt:
package org.example;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

public class DataFit {
    public static double calcY(final double i, final Double[] d) {
        return d[0] * i * i * i + d[1] * i * i + d[2] * i + d[3];
    }

    public static double calcE(final double[][] xys, final Double[] d) {
        double sum = 0;
        for (double[] xy : xys) {
            sum += Math.abs(calcY(xy[0], d) - xy[1]);
        }
        return sum;
    }

    public static double check(final double bestE, final Double[] best, final ArrayList&lt;Double[]&gt; bests, final double[][] xys) {
        double e = calcE(xys, best);
        if (e &lt; bestE) {
            bests.add(best);
            return e;
        }
        return 10000;
    }

    public static void shrink(final double[][] xys, final ArrayList&lt;Double[]&gt; bests) {
        bests.sort(Comparator.comparingDouble(a -&gt; calcE(xys, a)));
        while (bests.size() &gt; 10) {
            bests.remove(bests.size() - 1);
        }
    }

    public static ArrayList&lt;Double[]&gt; fit1(final double[][] xys, final int limit, final double step, final double[] startValues) {
        int[] starts = new int[startValues.length];
        for (int i = 0; i &lt; starts.length; i++) {
            starts[i] = Math.max(0, (int) Math.round((startValues[i] - 1d / step * (limit / 2d)) * limit));
        }
        ArrayList&lt;Double[]&gt; bests = new ArrayList&lt;&gt;();
        double bestE = 10000;
        for (int i = starts[0]; i &lt;= starts[0] + limit; i++) {
            for (int j = starts[1]; j &lt;= starts[1] + limit; j++) {
                for (int k = starts[2]; k &lt;= starts[2] + limit; k++) {
                    for (int l = starts[3]; l &lt;= starts[3] + limit; l++) {
                        bestE = Math.min(bestE, check(bestE, new Double[]{-i / step, -j / step, -k / step, -l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{-i / step, -j / step, -k / step, l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{-i / step, -j / step, k / step, -l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{-i / step, -j / step, k / step, l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{-i / step, j / step, -k / step, -l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{-i / step, j / step, -k / step, l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{-i / step, j / step, k / step, -l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{-i / step, j / step, k / step, l / step}, bests, xys));

                        bestE = Math.min(bestE, check(bestE, new Double[]{i / step, -j / step, -k / step, -l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{i / step, -j / step, -k / step, l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{i / step, -j / step, k / step, -l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{i / step, -j / step, k / step, l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{i / step, j / step, -k / step, -l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{i / step, j / step, -k / step, l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{i / step, j / step, k / step, -l / step}, bests, xys));
                        bestE = Math.min(bestE, check(bestE, new Double[]{i / step, j / step, k / step, l / step}, bests, xys));

                        if (bests.size() &gt; 20) {
                            shrink(xys, bests);
                        }
                    }
                }
            }
        }
        shrink(xys, bests);
        return bests;
    }

    @SuppressWarnings(&quot;UnusedReturnValue&quot;)
    public static ArrayList&lt;Double[]&gt; fit2(final double[][] xys) {
        ArrayList&lt;Double[]&gt; bests1 = new ArrayList&lt;&gt;();
        ArrayList&lt;Double[]&gt; bests2 = new ArrayList&lt;&gt;();

        // 0.5, 1.0 and 2.0 divisor = 2.0, 1.0 and 0.5-step width
        for (int i = 1; i &lt;= 4; i *= 2) {
            bests1.addAll(fit1(xys, 50, i / 2d, new double[4]));
        }

        shrink(xys, bests1);

        for (Double[] best : bests1) {
            System.out.println(Arrays.toString(best));
            System.out.println(calcE(xys, best));
        }
        System.out.println();

        // 50 limit and 50 divisor (0.02-step width) = 0.02, 0.04, ..., 1.0
        for (Double[] best : bests1) {
            bests2.addAll(fit1(xys, 50, 50, new double[]{best[0], best[1], best[2], best[3]}));
        }

        shrink(xys, bests2);

        for (Double[] best : bests2) {
            System.out.println(Arrays.toString(best));
            System.out.println(calcE(xys, best));
        }
        System.out.println();

        return bests2;
    }

    public static void main(String[] args) {
        fit2(new double[][]{{0, 4.5}, {4, 43}, {8, 80}, {10, 99}, {12, 100}});
        fit2(new double[][]{{0, 1}, {4, 30}, {8, 49}, {10, 64}, {12, 100}});
    }
}

(Am besten von unten nach oben lesen).
Die Ausgabe wäre dann:
[0.0, -0.5, 14.0, 4.0]
18.5
[0.0, -0.5, 14.0, 3.5]
19.0
[0.0, 0.0, 9.5, 4.0]
19.5
[0.0, 0.0, 9.0, 7.0]
20.5
[0.0, 0.0, 9.0, 7.0]
20.5
[0.0, 0.0, 9.0, 6.5]
21.0
[0.0, 0.0, 9.0, 6.0]
21.5
[0.0, 0.0, 9.0, 6.0]
21.5
[0.0, 0.0, 9.0, 5.5]
22.0
[0.0, 0.0, 9.0, 5.0]
22.5

[-0.04, 0.42, 8.68, 4.5]
6.439999999999998
[-0.04, 0.42, 8.66, 4.5]
6.6000000000000085
[-0.04, 0.42, 8.64, 4.5]
6.799999999999997
[-0.04, 0.42, 8.62, 4.64]
7.140000000000028
[-0.04, 0.42, 8.62, 4.62]
7.1600000000000135
[-0.04, 0.42, 8.62, 4.6]
7.180000000000048
[-0.04, 0.42, 8.62, 4.58]
7.200000000000033
[-0.04, 0.42, 8.62, 4.56]
7.220000000000025
[-0.04, 0.42, 8.62, 4.54]
7.24000000000001
[-0.04, 0.42, 8.62, 4.52]
7.260000000000037

[0.0, 0.5, 2.0, 1.0]
23.0
[0.0, 0.5, 2.0, 0.5]
24.5
[0.0, 0.5, 1.5, 5.0]
26.0
[0.0, 0.5, 1.5, 4.5]
26.5
[0.0, 0.5, 1.5, 4.0]
27.0
[0.0, 0.5, 1.5, 3.5]
27.5
[0.0, 0.5, 1.5, 3.0]
28.0
[0.0, 0.5, 1.5, 2.5]
28.5
[0.0, 0.5, 1.0, 9.0]
29.0
[0.0, 0.5, 1.0, 8.5]
29.5

[0.0, 0.56, 1.52, 1.0]
22.27999999999998
[0.0, 0.56, 1.52, 1.0]
22.27999999999998
[0.0, 0.56, 1.52, 0.98]
22.339999999999982
[0.0, 0.56, 1.52, 0.98]
22.339999999999982
[0.0, 0.56, 1.52, 0.96]
22.399999999999977
[0.0, 0.56, 1.52, 0.96]
22.399999999999977
[0.0, 0.56, 1.5, 1.16]
22.399999999999984
[0.0, 0.56, 1.5, 1.14]
22.41999999999998
[0.0, 0.56, 1.5, 1.12]
22.439999999999984
[0.0, 0.56, 1.5, 1.1]
22.45999999999998

Das heißt, ein Polygon 3. Grades mit den Koeffizienten [-0.04, 0.42, 8.68, 4.5] wäre für die erste Punktemenge &quot;optimal&quot; und ein Polygon 2. Grades mit den Koeffizienten [0.56, 1.52, 1.0] wäre für die zweite Punktemenge &quot;optimal&quot;. Gezeichnet hab ich es jetzt nicht extra, aber ich nehme an, dass das stimmt, optimal und minimal (die Koeffizienten betreffend) wäre. Aber belehrt mich gerne eines Besseres ...
]]></description><link>https://www.c-plusplus.net/forum/topic/354168/vier-ineinander-geschachtelte-for-schleifen-beschleunigen-polygone-finden</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354168/vier-ineinander-geschachtelte-for-schleifen-beschleunigen-polygone-finden</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 29 Jun 2023 09:07:17 GMT</pubDate></item><item><title><![CDATA[Java: Refactoring einer zu langen Methode...]]></title><description><![CDATA[@Swordfish sagte in Java: Refactoring einer zu langen Methode...:

Was kommt raus wenn Du von &quot;Eine Methode genau eine Aufgabe&quot; ausgehst

(Gesamt-)Ziel ist es, die Daten, die in Form von JSON vorliegen, zu &quot;normalisieren&quot; - also sie in irgendeiner Form zu modifizieren. Das kann man &quot;kleinteiliger&quot; machen, aber das sollte dann auch sinnvoll sein. Separations of concerns ist mir zwar ein Begriff, allerdings sind die &quot;Eingangsvoraussetzungen&quot;, wann man SoC anwenden sollte, nicht schwarz oder weiß, sondern liegen in einer Grauzone, bzw. sind mit einem Ermessensspielraum verbunden, meiner Meinung nach. Diese Methode wird nur einmal verwendet und auch die &quot;Methodenteile&quot; werden nur von dieser Methode verwendet. Ich verwende/wiederhole also Teilimplementierungen an anderer Stelle nicht. Für mich ist das ein Zeichen dafür, SoC nicht anzuwenden und die Methode nicht weiter zu splitten.
Überzeugt mich aber gerne vom Gegenteil.
]]></description><link>https://www.c-plusplus.net/forum/topic/354083/java-refactoring-einer-zu-langen-methode</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/354083/java-refactoring-einer-zu-langen-methode</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 12 May 2023 16:11:22 GMT</pubDate></item><item><title><![CDATA[Mittlere Preis-Abweichung in % für 4-Stunden-Klines berechnen]]></title><description><![CDATA[Hi,
ich verwende zwei Libraries (eine binance-api und ta4j-core (... und erzwungenermaßen lombok)), aber weiß nicht genau, ob es die Funktion, die ich suche, schon gibt ... oder sie neu erstellt werden muss.
Es gibt 4-Stunden-Klines. Ich möchte nun berechnen, inwieweit alle Klines durchschnittlich in Prozent vom Durchschnittspreis abweichen, also wie die Volatilität wäre.
Skizze: https://i.postimg.cc/c1VhMV08/grafik.png , gesucht ist also jeweils die Boxhöhe.
Hier mein Ansatz:
import com.webcerebrium.binance.api.BinanceApi;
import com.webcerebrium.binance.api.BinanceApiException;
import com.webcerebrium.binance.datatype.BinanceCandlestick;
import com.webcerebrium.binance.datatype.BinanceInterval;
import com.webcerebrium.binance.datatype.BinanceSymbol;

import org.ta4j.core.BarSeries;
import org.ta4j.core.BaseBar;
import org.ta4j.core.BaseBarSeriesBuilder;
import org.ta4j.core.indicators.helpers.MedianPriceIndicator;
import org.ta4j.core.indicators.statistics.MeanDeviationIndicator;
import org.ta4j.core.indicators.statistics.StandardDeviationIndicator;
import org.ta4j.core.indicators.statistics.VarianceIndicator;
import org.ta4j.core.num.DecimalNum;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.time.Duration;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Scanner;

public class Main {
    public record VolatilityResult(double average, double deviation, double halfDeviation, double up, double lo) { }

    // private static final SimpleDateFormat sdf = new SimpleDateFormat();
    private static final BinanceApi api = new BinanceApi();

    public static String f(final Object dObj) {
        if (dObj instanceof BigDecimal) {
            return ((BigDecimal) dObj).toPlainString();
        }
        return String.format(Locale.ROOT, &quot;%.9f&quot;, (Double) dObj);
    }

    public static void print(final VolatilityResult vr) {
        System.out.println(&quot;vr.average   = &quot; + f(vr.average));
        System.out.println(&quot;vr.deviation = &quot; + f(vr.deviation));
        System.out.println(&quot;vr.halfDevi  = &quot; + f(vr.halfDeviation));
        System.out.println(&quot;vr.up        = &quot; + f(vr.up));
        System.out.println(&quot;vr.lo        = &quot; + f(vr.lo));
    }

    public static BaseBar convertBinanceCandlestickToBaseBar(final BinanceCandlestick cs) {
        return new BaseBar(
                Duration.ofHours(4),
                ZonedDateTime.ofInstant(
                        Instant.ofEpochMilli(cs.getOpenTime()), ZoneId.systemDefault()),
                cs.getOpen(),
                cs.getHigh(),
                cs.getLow(),
                cs.getClose(),
                cs.getVolume());
    }

    public static List&lt;BinanceCandlestick&gt; getBinanceCandlesticks(final String name)
            throws BinanceApiException, Exception {
        //noinspection SpellCheckingInspection
        BinanceSymbol ethbtc = new BinanceSymbol(&quot;ETHBTC&quot;);
        Field symbol = ethbtc.getClass().getDeclaredField(&quot;symbol&quot;);
        symbol.setAccessible(true);
        symbol.set(ethbtc, name);
        return api.klines(ethbtc, BinanceInterval.FOUR_HOURS, 31 * 6, null);
    }

    public static VolatilityResult getAvgVolatility1(final List&lt;BinanceCandlestick&gt; klines) {
        int n = klines.size() - 1;
        double sumAverage = 0;
        double sumVolatility = 0;
        for (int i = 0; i &lt; n; i++) {
            BinanceCandlestick cs = klines.get(i);
            sumAverage += (cs.getHigh().doubleValue() + cs.getLow().doubleValue()) / 2;
            sumVolatility += cs.getHigh().doubleValue() / cs.getLow().doubleValue();
        }
        double average = sumAverage / n;
        double deviation = (sumVolatility / n - 1) * 100;
        double halfDeviation = deviation / 2;
        double up = average + average * ((sumVolatility / n - 1) / 2);
        double lo = average - average * ((sumVolatility / n - 1) / 2);
        return new VolatilityResult(average, deviation, halfDeviation, up, lo);
    }

    public static double[] getAvgVolatility2(final List&lt;BinanceCandlestick&gt; klines) {
        int n = klines.size() - 1;
        BarSeries series = new BaseBarSeriesBuilder().withName(&quot;my_series&quot;).build();
        for (int i = 0; i &lt; n; i++) {
            BinanceCandlestick cs = klines.get(i);
            series.addBar(convertBinanceCandlestickToBaseBar(cs));
        }
        MedianPriceIndicator mpi = new MedianPriceIndicator(series);
        VarianceIndicator vi = new VarianceIndicator(mpi, n);
        StandardDeviationIndicator sdi = new StandardDeviationIndicator(mpi, n);
        MeanDeviationIndicator mdi = new MeanDeviationIndicator(mpi, n);
        return new double[]{
                vi.getValue(n - 1).doubleValue(),
                sdi.getValue(n - 1).doubleValue(),
                mdi.getValue(n - 1).doubleValue()
        };
    }

    public static void main(final String[] args) throws BinanceApiException, Exception {
        System.out.println(&quot;Enter symbol:&quot;);
        String symbol = new Scanner(System.in, Charset.defaultCharset()).nextLine();
        List&lt;BinanceCandlestick&gt; cs = getBinanceCandlesticks(symbol);
        VolatilityResult v1 = getAvgVolatility1(cs);
        double[] v2 = getAvgVolatility2(cs);
        print(v1);
        System.out.println(f(v2[0]));
        System.out.println(f(v2[1]));
        System.out.println(f(v2[2]));
    }
}

Die Ausgabe ist für &quot;ETHBTC&quot; zurzeit:
Enter symbol:
ETHBTC

vr.average   = 0.068484319
vr.deviation = 0.909483930
vr.halfDevi  = 0.454741965
vr.up        = 0.068795746
vr.lo        = 0.068172892
0.000006160
0.002481983
0.002024274

... ich glaube, ich suche nach der average absolute deviation (AAD), oder?: https://en.wikipedia.org/wiki/Average_absolute_deviation
]]></description><link>https://www.c-plusplus.net/forum/topic/353979/mittlere-preis-abweichung-in-für-4-stunden-klines-berechnen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/353979/mittlere-preis-abweichung-in-für-4-stunden-klines-berechnen</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 24 Mar 2023 03:05:07 GMT</pubDate></item><item><title><![CDATA[Zyklomatische Komplexität von if-else-... verringern]]></title><description><![CDATA[@hustbaer sagte in Zyklomatische Komplexität von if-else-... verringern:

Sorry, aber Code-Reviews in dem Umfang in Java (was ich nur rudimentär kann) mach ich nicht.

Ok, kein Problem, dann eben nicht. 
]]></description><link>https://www.c-plusplus.net/forum/topic/353948/zyklomatische-komplexität-von-if-else-verringern</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/353948/zyklomatische-komplexität-von-if-else-verringern</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 07 Mar 2023 18:17:26 GMT</pubDate></item><item><title><![CDATA[Eigene Sinus und Cosinus funktionieren nicht]]></title><description><![CDATA[Schau mal auf https://www.wolframalpha.com/input?i=series+sin+x+to+order+20
Da kannst du sehen
a) wie groß die Nenner werden
b) dass die die Kurven trotzdem bei &quot;größeren&quot; ∣x∣|x|∣x∣ weglaufen.
Was macht eigentlich deine Fakutät? Du fängst mit 3! und machst 10 Schritte, wobei du immer 2 addierst. Also 3!, 5!, ... 21! (wenn ich mich nicht verzählt habe). 21! sind schon 51090942171709440000. Was für einen Rückgabetyp hat deine Funktion?
]]></description><link>https://www.c-plusplus.net/forum/topic/353640/eigene-sinus-und-cosinus-funktionieren-nicht</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/353640/eigene-sinus-und-cosinus-funktionieren-nicht</guid><dc:creator><![CDATA[wob]]></dc:creator><pubDate>Fri, 11 Nov 2022 12:35:51 GMT</pubDate></item><item><title><![CDATA[WindowBuilder Design]]></title><description><![CDATA[Habe Eclipse nochmal komplett neu installiert und habe jetzt im WindowBuilder auch die Version 1.9.6. Nun habe ich in einer leeren Anwendung einen Frame angelegt. Klicke ich nun auf &quot;Design&quot;, öffnet sich das Fenster ohne Fhlermeldung, die Komponentenpalette ist allerdings leer. Code steht unten.
Bitte helft mir dabei 
package TomTest;


import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class TestFrame1 extends JFrame {

	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					TestFrame1 frame = new TestFrame1();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public TestFrame1() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
	}

}

]]></description><link>https://www.c-plusplus.net/forum/topic/353069/windowbuilder-design</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/353069/windowbuilder-design</guid><dc:creator><![CDATA[HerrRatlose]]></dc:creator><pubDate>Wed, 09 Mar 2022 11:15:29 GMT</pubDate></item><item><title><![CDATA[Alle Zeichen verschieben]]></title><description><![CDATA[@Th69 sagte in Alle Zeichen verschieben:

Nein, denn shift ist ein Wert von 0 bis N, d.h. im Mittel N/2, also insgesamt O(N*N).

Oh doch, ist letztendlich aber auch egal, weil er ja nicht funktioniert...
@Th69 sagte in Alle Zeichen verschieben:

dann kannst du einfach Collections.rotate(List&lt;type&gt; list, int distance) benutzen

Kein zusätzliches Array/ List.
@Th69 sagte in Alle Zeichen verschieben:

Ansonsten schau auch mal in Fastest algorithm for circle shift N sized array for M position sowie Right rotate an array k times (letzter Code)

Danke, der letzte Code vom zweiten Link könnte es sein.
]]></description><link>https://www.c-plusplus.net/forum/topic/352638/alle-zeichen-verschieben</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/352638/alle-zeichen-verschieben</guid><dc:creator><![CDATA[EinNutzer0]]></dc:creator><pubDate>Thu, 09 Sep 2021 10:28:51 GMT</pubDate></item><item><title><![CDATA[Benachrichtigung aufs Handy bekommen]]></title><description><![CDATA[@EinNutzer0 sagte in Benachrichtigung aufs Handy bekommen:

Oder habt ihr vielleicht Alternativvorschläge dazu?

Wenn Du schon gmail nutzt, hat ja Google schon deine Seele .. err Daten.
Dann kannst auch die neueren Techniken verwenden .....
Push Messages über Google z.b.
Der Client für Android sah nicht so kompliziert aus ... und zum schicken langt irgendwas, was einen Request an einen Google Server absetzen kann.
Kenn mich nicht so aus, weil ich sowas generell blocke 
Wenn du ne Seite irgendwo hasst, wäre web push sicher auch ne option. Musst nur was hosten fürs registrieren und einen Provider suchen. (keine ahnung ob man bei providern ohne eigene Registrierung sich nen channel erstellen kann ??? )
Da Dich klickzahlen und anzahl an Subscriper nicht intressieren, kannst dich auf die kostenlosen Dinger konzentrieren.
Dafür brauchst keine App / Client mehr aufm SmartPhone... Android nervt dich dann soweiso weil der browser aus dem Hintergrund pushen kann (je nach Einstellung).
Wenn du aber was hasst, was ständig am Inet ist mit eigener IP und java / irgendwas laufen kann (NAS z.b.) ... ist kein problem nen eigenen kleinen Server zu schreiben, der nachrichten sammelt und den man dannach abfragen kann mit ner android app ....
Wenn nicht, gibt sicher irgendwo freien webhost mit java anbindung ... oder freies angebot von einem FTP / webdav / git Service missbrauchen ... ist die selbe Liga wie email dazu hernehmen, aber vielleicht gibts einfacher zu verwendende biblios ... Aber als angehender Informatiker sollte dich das alles vor keine so großen Hürden stellen ...
]]></description><link>https://www.c-plusplus.net/forum/topic/352608/benachrichtigung-aufs-handy-bekommen</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/352608/benachrichtigung-aufs-handy-bekommen</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Tue, 07 Sep 2021 15:45:12 GMT</pubDate></item><item><title><![CDATA[Zufälligen nextGaussian-Wert zwischen zwei Grenzen mit einer Häufung]]></title><description><![CDATA[@Schlangenmensch sagte in Zufälligen nextGaussian-Wert zwischen zwei Grenzen mit einer Häufung:

Ich hatte schon überlegt schnell 'n Test dafür zu implementieren und zu plotten um das Problem zu veranschaulichen, konnte mich aber nicht dazu durchringen.

Das ist auch etwas, was du nicht so leicht mit Amateurmitteln nachweisen kannst. Da muss man sich schon ordentlich auskennen, wonach man wie sucht. Ich könnte das spontan nicht, und ich habe mich mal eine Weile  mit der Korrelation zwischen aufeinanderfolgenden Zahlen beschäftigt (da ist Java Random sowieso nicht so toll, weil die Standardimplementierung ein LCG ist). Aber ich weiß ohne Nachforschung nicht, ob die gleichen Methoden hier greifen würden. Das hat bisher auch bestimmt noch niemand untersucht, weil niemand ernsthaft auf die Idee käme, die Zahlen wie hier gezeigt zu erzeugen.
]]></description><link>https://www.c-plusplus.net/forum/topic/352590/zufälligen-nextgaussian-wert-zwischen-zwei-grenzen-mit-einer-häufung</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/352590/zufälligen-nextgaussian-wert-zwischen-zwei-grenzen-mit-einer-häufung</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 12 Aug 2021 08:24:22 GMT</pubDate></item><item><title><![CDATA[Erzeugen eines Binärbaums aus generischer Klasse]]></title><description><![CDATA[Hallo miteinander!
Ich habe ein Problem mit dem Erzeugen eines Binärbaums aus folgender generischer Klasse:
public class BinarySearchTree&lt;T extends Comparable&lt;T&gt;&gt;

    private T content;
    private BinarySearchTree&lt;T&gt; leftChild, rightChild;

    public BinarySearchTree() 
    {
        content = null;
        leftChild = null;
        rightChild = null;
    }
public void add( T t )
    {
        if ( isEmpty() ) 
        {
            content = t;
            leftChild = new BinarySearchTree&lt;T&gt;();
            rightChild = new BinarySearchTree&lt;T&gt;();
        }
        else
        {
            if ( content.compareTo( t ) &gt; 0 )
            {
                leftChild.add( t );
            }
            else if ( content.compareTo( t ) &lt; 0 )
            {
                rightChild.add( t );
            }
        }
    }

// weitere Methoden

Wenn ich alles richtig verstanden habe, sind für den Baum nur Typargumente zugelassen, die Comparable erweitern, also eine compareTo-Methode implementieren.
Comparable sieht bei mir folgendermaßen aus:
public abstract class Comparable&lt;T&gt;
{
    public abstract int compareTo( T t );
}

Mein konkretes Problem ist nun, dass der Compiler mir den Fehler &quot;type argument java.lang.Integer is not within bounds of type - Variable T&quot; meldet, wenn ich einen Baum mit Typargument Integer erzeugen will:
BinarySearchTree &lt;Integer&gt;  bst2  = new BinarySearchTree &lt;&gt; ();

Meines Wissens nach hat Integer aber quasi &quot;von Haus aus&quot; eine entsprechende compareTo-Methode, weswegen ich das Problem hier nicht verstehe. Wenn mir jemand das Problem erläutern kann, und bestenfalls auch eine Lösung dafür nennen kann, wäre ich sehr dankbar!
Mit der selbst geschriebenen Klasse &quot;Student&quot; (welche auch eine compareTo-Methode implementiert) als Typargument für die parametrisierte Klasse bspw. funktioniert das Erzeugen problemlos, warum also nicht mit Integer?
Im Voraus vielen Dank für eure Hilfe!
]]></description><link>https://www.c-plusplus.net/forum/topic/352588/erzeugen-eines-binärbaums-aus-generischer-klasse</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/topic/352588/erzeugen-eines-binärbaums-aus-generischer-klasse</guid><dc:creator><![CDATA[DeLaGoi]]></dc:creator><pubDate>Thu, 05 Aug 2021 08:34:02 GMT</pubDate></item></channel></rss>