Hat jemand Verbesserungsvorschläge für dieses Programm?

Hallo, ich versuche gerade ein Programm zu schreiben (in Java Eclipse), das folgende Aufgabenstellung hat:

Das Programm soll alle Fibonacci-Zahlen in einem geschlossenen Intervall [a, b] als kommagetrennte Liste ausgeben. Ausnahme: die Zahlen, die durch 3 teilbar sind, sollen durch ";" separiert sein. Die natürlichen Zahlen a und b müssen vom Benutzer eingegeben werden.

Beispiel 1 (blau = Benutzereingabe):

a: 3
b: 100
Fibonacci=3;5,8,13,21;34,55,89

Beispiel 2:

a: 12
b: 800
Fibonacci=13,21;34,55,89,144;233,377,610

UND Teil 2

Das Programm soll noch eine Liste mit den ungeraden Fibonacci-Zahlen und den Intervallenden a und b ausgeben. Auch hier gilt, dass alle Zahlen, die durch 3 teilbar sind, durch einen folgenden Strichpunkt zu kennzeichnen sind. Eine Zahl darf nicht doppelt in der Ausgabe vorkommen. 

Für obige Eingabe sollte also zusätzlich folgende Zeile ausgegeben werden:

Beispiel 1

ungerade Fibonacci=[3;5,13,21;55,89,100]

Beispiel 2

ungerade Fibonacci=[12;13,21;55,89,233,377,800]

Soviel zur Aufgabenstellung.
Bis jetzt habe ich folgendes ( siehe Bild) geschafft. Meine Problem: wenn der Benutzer zum Beispiel für a 10 und für b 20 eingibt, dann zeigt das Programm die zehnte bis zwanzigste Zahl, aber es sollte eigentlich nur 13 anzeigen. Des Weiteren weis ich nicht, was ich machen sollte, damit nach jeder ungeraden Zahl ein ; steht. und Teil 2 der Aufgabe ist mir auch nicht klar, aber ich wäre schon glücklich genug, wenn mir jemand bei Teil 1 helfen könnte!

Danke und liebe Grüße!

Bild zum Beitrag
Computer, Programmierer, programmieren, Java, Informatik, Informatiker
CSS / JavaScript: Hilfe bei Leaflet-Integration?

Hallo Leute,

ich brauche Hilfe bei dieser Arbeit.

1. Es sollen zwei Karten nebeneinander sein. Jedoch soll die rechte Karte eine Here-Map sein. Wie baue ich das in den Code ein (siehe unten)?

Sie müssen http://ivansanchez.gitlab.io/Leaflet.TileLayer.HERE/leaflet-tilelayer-here.js in einem <script>-Tag laden. Danach müsste es mit sowas hier gehen:
L.tileLayer.here({
  appId: 'ViVS62MmsdTJSzwXMlHb',
  appCode: 'bsODmSCzkVqEMR8TnGPHdw'
}).addTo(map);
Statt addTo(map) kommt natürlich der Name Ihrer rechten Karte hin.
appId und appCode sind hier aus dem Beispiel von Ivan Sanchez http://ivansanchez.gitlab.io/Leaflet.TileLayer.HERE/demo.html

________________

2. Außerdem soll die zweite Karte sozusagen synchron/parallel mit der linken Karte verlaufen:

Sie müssen, wenn der Benutzer in der linken Karte zoomt oder sie verschiebt, die rechte Karte aktualisieren. Dazu müssen Sie eine Funktion schreiben, die aufgerufen wird, wenn auf der linken Karte das "zoomend" oder "moveend"-Ereignis auftritt.
Also etwa
map1.on("zoomend", meine_funktion);
und dann in der meine_funktion können Sie auf der rechten Karte "setBounds" aufrufen, um die rechte Karte zu verschieben/zu zoomen. Das "setBounds" muss dabei den aktuellen Ausschnitt der linken Karte übergeben bekommen (getBounds).

_________________________________________________

<html>
  <head>
    <link rel="stylesheet" href="https: //unpkg.com/leaflet@1.4.0/dist/leaflet.css"></link>
    <script src="https: //unpkg.com/leaflet@1.4.0/dist/leaflet.js"></script>
    <script src="http: //unpkg.com/leaflet@1.3.1/dist/leaflet.js"></script>
    <script>
      function initMaps() {
        map = new L.map('meine_map');
        L.tileLayer('https: //{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);
        let karlsruhe = new L.LatLng(49, 8.4);
        map.setView(karlsruhe, 12);
        map1 = new L.map('meine_map1');
        L.tileLayer('http: //{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png').addTo(map1);
        map1.setView(karlsruhe, 12);

        document.getElementById("suchen").addEventListener("click", suchen);
      }

      async function suchen() {
        let url = new URL('https: //nominatim.openstreetmap.org/search');
        url.searchParams.append('format', 'json');
        url.searchParams.append('q', document.getElementById("ort").value);

        let response = await fetch(url);
        let json = await response.json();
        let box = json[0].boundingbox;

        map.fitBounds([ [ box[0],box[2] ], [ box[1],box[3] ] ]);
        map1.fitBounds([ [ box[0],box[2] ], [ box[1],box[3] ] ]);
      }
    </script>
  </head>
  <body onLoad="initMaps()">
    <div id="meine_map" style="height: 360px; width: 360px;"></div>
    <div id="meine_map1" style="position: absolute; top: 9px; left: 375px; height: 360px; width: 360px;"></div>
    <input type="text" id="ort">
    <button id="suchen">Suchen</button>
  </body>

Anmerkung: Damit der GF-Editor die URLs nicht verfälscht, wurde im Protokoll stets ein Leerzeichen hinzugefügt.

Ich danke euch für die Hilfe im Voraus!

LG

HTML, programmieren, CSS, Java, JavaScript, Informatik, Informatiker
Java / BlueJ: Wo ist hier der Fehler?

Ich habe folgendes Programm geschrieben:

public class Formel {
  private int c;

  private int p;

  private int k;

  private boolean ergebnis;

  public Formel() {
    double formel = Math.pow(c, 3) - 3 * Math.pow(c, 2) * (p -k) + 3 * c * (Math.pow(p, 2) - Math.pow(k, 2)) - (Math.pow(p, 3) + Math.pow(k, 3));
    p = 2;
    k = 1;
    boolean ergbnis = false;

    for (formel = 0;;) {
      do {
        Math.pow(-4 * Math.pow(k, 3) + 9 * Math.pow(k, 2) * p + Math.pow(-16 * Math.pow(k, 6) + 24 * Math.pow(k, 5) * p + 9 * Math.pow(k, 4) * Math.pow(p, 2) - 22 * Math.pow(k, 3) * Math.pow(p, 3) + 9 * Math.pow(k, 2) * Math.pow(p, 4), 0.5) - 3* k * Math.pow(p, 2), 1 / 3); // divided by Math.pow(2, 1/3);
        p++;
        k++;
      }
      while (ergebnis = false);
  
      if (ergebnis = true) {
        System.out.println(c);
        System.out.println(p);
        System.out.println(k);
        break;
      }
    }
  }
}

Hier:

3 * k* Math.pow(p, 2), 1 / 3); // divided by Math.pow(2, 1 / 3)

will ich, dass die linke Seite (also den ganzen linken Term beginnend mit Math.pow(-4Math.pow(k,3)...) durch die rechte geteilt wird. Also soll da stehen:

Math.pow(-4 * Math.pow(k, 3) + 9 * Math.pow(k, 2) * p + Math.pow(-16 * Math.pow(k, 6) + 24 * Math.pow(k, 5) * p + 9 * Math.pow(k, 4) * Math.pow(p, 2) - 22 * Math.pow(k, 3) * Math.pow(p, 3) + 9 * Math.pow(k, 2) * Math.pow(p, 4), 0.5) - 3 * k * Math.pow(p, 2), 1 / 3) / Math.pow(2, 1 / 3);

Jedoch ist das Problem dass er das geteilt Zeichen nicht als Statement sieht? Was ist hier falsch bzw. wie kann ich das korrigieren?

Java, BlueJ, Informatiker

Meistgelesene Fragen zum Thema Informatiker