Was ist da schief (JS)?

Starte ich das Programm so beginnt es so wie ich es will. Irgendwann wird dann aber ein Fehler gezeigt

("main.js:27 Uncaught TypeError: Cannot read properties of null (reading 'setAttribute')

  at ClickIt (main.js:27)

  at clickvol2 (main.js:21)

  at HTMLParagraphElement.<anonymous> (main.js:30))

und mehrere Flächen farbig markiert und man muss manchmal doppelt klicken. Wo liegt hier der Fehler?

JS:
"use strict";

let genNum = function() {

    let gen = Math.random() * 9;

    let num = Math.round(gen);

    let numers = ["null", "eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun"];

    let final = (numers[num]);

    if(final === "zehn") {

        genNum()

    }

    return final;

};

let i = 0;

document.getElementById("Punkteanzahl").textContent = i;

let clickvol2 = function() {

    if (document.querySelector("#eins", "#zwei", "#drei", "#vier", "#fünf", "#sechs", "#sieben", "#acht", "#neun").hasAttribute("class")) {

        console.log(".")

    } else {

        ClickIt(genNum())

    }};

let ClickIt = function(num) {

    let hash = "#";

    let ident = hash.concat(num);

    document.querySelector(ident).setAttribute("class", "click");

    document.querySelector(ident).addEventListener("click", function() {

    document.querySelector(ident).removeAttribute("class");

    clickvol2();

    i++;

})

};

ClickIt(genNum());

console.log(document.getElementById("Punkteanzahl").textContent)

...zum Beitrag

Guten Abend,

Beim ersten Ansehen ist mir folgendes aufgefallen:

if (document.querySelector("#eins", "#zwei", "#drei", "#vier", "#fünf", "#sechs", "#sieben", "#acht", "#neun").hasAttribute("class")) {...}

Probiere das mal mit document.querySelectorAll() - Diese Funktion kann mehrere Parameter (in diesem Falle Selektoren) aufnehmen und verarbeiten, was bei document.querySelector() meines Erachtens nicht der Fall ist.

...zur Antwort

Guten Abend,

Eine mögliche Lösung wäre, allen drei Containern eine feste Breite (wobei der linke und rechte Container gleich Breit sind) zu geben.

Dann im mittleren Container nur noch mithilfe von text-align: center; zentrieren und es sollte klappen.

Etwa so hier:

...
<div id="main-container">
  <div class="sub-container">...</div>
  <div class="sub-container">...</div>
  <div class="sub-container">...</div>
</div>
...

#main-container {
  display: flex;
  /* justify-content: space-between; */
}
.sub-container {
  width: 33.333%;
  text-align: center;
}

LG

...zur Antwort

Was soll man dazu schon sagen? Leider sind viel zu viele Menschen auf einmal "anders" und lassen sich zu leicht von ihrem Umfeld beeinflussen.

...zur Antwort

Hier mein Vorschlag:

Erlaubt sind die Zeichen des Alphabets (ohne Umlaute) sowie Leerzeichen. Der im Klartext vorliegende Text wird zunächst in Kleinbuchstaben umgewandelt und anschließend um die mit key angegebenen Positionen verschoben.

def encrypt_caesar(text, key):
  alphabet = 'abcdefghijklmnopqrstuvwxyz'
  encrypted = ''
  for character in text.lower():
    encrypted += alphabet[(alphabet.find(character) + key) % 26] if character != ' ' else ' '
  return encrypted 
...zur Antwort

Guten Abend,

Ich persönlich arbeite relativ gerne mit Flexbox.

Daher würde ich wie folgt vorgehen:

  1. Einen Hauptcontainer erstellen
  2. im Hauptcontainer 3 weitere Container in der Reihe nebeneinander anordnen (der linke Container enthält die linke Card, der mittlere die beiden mittleren sowie der rechte die rechte Card)

Der Hauptcontainer ist für die vertikale Zentrierung der Cards verantwortlich, daher gilt unter Zuhilfenahme des Flexbox-Systems:

#main-container {
  display: flex;
  align-items: center;
}

Ich habe es nicht ausprobiert, aber damit sollte es funktionieren.

LG

...zur Antwort

Hallo,

Das dient meines Wissens zur Vermeidung sogenannter DOS bzw DDOS-Attacken, die den entsprechenden Webserver (der die angeforderte Webseite ausliefert) außer Kraft setzen sollen. Der Webserver kann dann nicht mehr auf weitere Anfragen reagieren und die Website ist voerst nicht mehr verfügbar.

Dienste wie Cloudflare schalten sich zwischen Client und Server und überprüfen den Browser (Client) auf bösartige Skripte, die genannte Attacken mitunter zum Ziel haben.

LG

...zur Antwort

Hallo,

Das in jeder gängigen Programmiersprache vorhandene Schlüsselwort return hat im Grunde 2 Funktionen:

  • es wird aus der aktuellen Funktion herausgesprungen bzw. zum Aufrufer zurückgekehrt
  • return gibt einen Wert, der hinter dem Schlüsselwort angegeben wird, zurück

Der Einsatz von return macht nur in Funktionen Sinn und ist im Regelfall auch nur dort gestattet.

Ob du nun eine Variable oder eine Konstante zurückgibst, ist im Grunde egal - in beiden Fällen handelt es sich letztendlich um einen Wert. Da du dich konkret auf C beziehst, ist auf die Rückgabe von Pointern mittels return Vorsicht geboten - aber das ist eine andere Sache.

Ein Beispiel zum sofortigen Beenden der Funktion mittles return:

#include <stdio.h>

void function(void) {
  printf("Anfang");
  return;
  printf("Ende");
}

int main(void) {
  function();
  return 0;
}

Das Wort Anfang wird erwartungsgemäß ausgegeben, Ende durch den vorherigen Aufruf von return allerdings nicht.

In den meisten Fällen haben Funktionen die Aufgabe, bestimmte Aufgaben zu erledigen und einen Wert zurückzugeben.

Im Folgenden wird eine Ganzzahl an eine Funktion übergeben, von dieser verdoppelt und anschließend wieder an den Aufrufer zurückgegeben:

#include <stdio.h>

int verdoppeln(int n) {
  return n * 2;
}

int main(void) {
  int n = verdoppeln(5);
  printf("%d\n", n);
  return 0;
}

Ich kann den mittels return zurückgegebenen Wert also einer Variablen zuweisen, in diesem Falle n.

Alternativ hätte ich die Funktion auch unter Verwendung einer Variablen verwenden können:

int verdoppeln(int n) {
  int m = n * 2;
  return m;
}

In der main Funktion bewirkt die return Anweisung das Beenden des Programms. Der Wert 0 signalisiert den meisten Systemen (Unix, Linux, ...) einen ordnungsgemäßen Ablauf des Programms, wohingegen andere Werte wie die 1 einen fehlerhaften Ablauf signalisieren.

LG

...zur Antwort

Schönen guten Abend,

Leider kann ich Java nur sehr schlecht, für solche Berechnungen nutze ich meistens Python. Deine Aufgabe wird also sein, folgenden Algorithmus in Java zu schreiben.

Ich gehe davon aus, dass die Fakultät rekursiv berechnet werden soll. Daher habe ich 2 Funktionen verwendet. Erstere fk berechnet rekursiv die Fakultät der übergebenen Zahl, zweitere bk errechnet zunächst mithilfe von fk die Fakultät und berechnet daraus anschließend den Binomialkoeffizienten.

def fk(n):
  return 1 if n == 0 else n * fk(n - 1)

def bk(n, k):
  return fk(n) / (fk(k) * fk(n - k))

print(bk(3, 1))

In diesem Falle wird der Binomialkoeffizient von 3 über 1 berechnet. Du könntest den Code auch dahingehend erweitern, dass keine negativen Zahlen übergeben werden dürfen.

LG

...zur Antwort

Hallo,

Wenn du ein Zeichen einliest, ist dieses doch bereits als ASCII-Code gespeichert, sofern dein Computer die ASCII-Code-Tabelle verwendet (was der Fall sein sollte).

Das ist nun mal die Art und Weise, wie Computer Zeichen speichern. Gibst du das Zeichen aus, wird dieses nur aus dem entsprechenden ASCII-Code umgewandelt.

Hier ein simples Programm:

#include <stdio.h>

int main(void) {
  int c = getchar();
  printf("%d\n", c);
  return 0;
}

Das Programm gibt beispielsweise den korrekten ASCII-Code 65 für ein großes A aus.

LG

...zur Antwort

Ich bin aktuell 17 Jahre alt und habe vor 2 Jahren mit der Webentwicklung begonnen, das heißt HTML, CSS, PHP, JavaScript.

Dann habe ich begonnen, die Programmiersprache C zu lernen und tue dies immer noch. Nebenbei programmiere ich eine Desktop-Anwendung in Electron, einfach weil man die Erfahrungen aus der Webentwicklung zur Entwicklung nativer Programme unter allen gängigen Betriebssystemen nutzen kann - und das ziemlich komfortabel.

Was die Webentwicklung angeht, benutze ich mittlerweile eigentlich nur noch React als JavaScript-Framework und NodeJS anstelle von PHP für das Backend, da ich in der eventgetriebenen Architektur von NodeJS viele Vorteile sehe.

Ansonsten lerne ich gerade Python, um ein bisschen mit dem RaspberryPI zu experimentieren.

LG

...zur Antwort

Nimm die Funktion atoi (ASCII to INT) aus der Standardbibliothek zur Konvertierung eines Strings in eine Ganzzahl.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
  int x = 2, y = atoi(argv[1]);
  printf("%d * %d = %d\n", x, y, x * y);
  return 0;
}

LG

...zur Antwort

Da das window-Objekt nicht definiert ist, gehe ich davon aus, dass du die Laufzeitumgebung NodeJS verwendest.

Um dem Browser eine Weiterleitung zu signalisieren, musst du eigentlich nur einen entsprechenden HTTP-Header setzen.

Ein einfaches Beispiel unter Verwendung des http-Moduls:

const http = require('http');

http.createServer((req, res) => {
  res.writeHead(301, {
    'Location': 'https://google.de'
  });
  res.end();
}).listen(8080);  

LG

...zur Antwort

Hallo,

Du hast angefangen C++ zu lernen und möchtest jetze eine Game Engine darin schreiben? Soll ich jetzt lachen oder weinen? Zumal C++ nicht gerade einfach zu erlernen ist und deine Mathematik-Kenntnisse zur Entwicklung einer brauchbaren Game-Engine definitiv nicht reichen werden.

Wie bereits geantwortet wurde, macht es auch keinen Sinn, Spiele auf dem iPad bzw iPhone zu programmieren.

Ich würde dir raten, erstmal richtig Programmieren zu lernen (was je nach Lernbereitschaft auch mal ein paar Jahre sein können) und dann weiter über deine vielen Ideen nachzudenken, die du mit deinem jetzigen Wissen nicht umsetzen kannst.

Liebe Grüße

...zur Antwort

Hier ein kleines, selbsterstelltes Beispiel:

<!DOCTYPE html>
<html lang="de">
  <head>
    <meta charset="UTF-8">
    <title>Tooltip</title>
    <style>
      * {
        box-sizing: border-box;
      }
      .container {
        position: relative;
      }
      .trigger {
        display: inline-block;
        z-index: 1;
        margin-bottom: 1rem;
        cursor: pointer;
      }
      .tooltip {
        position: absolute;
        z-index: 2;
        padding: 0.5rem;
        color: #fff;
        background-color: rgba(0, 0, 0, 0.75);
        border-radius: 0.25rem;
      }
      .hidden {
        display: none;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="trigger">Tooltip 1</div>
      <div class="tooltip hidden">Lorem ipsum dolor sit amet...</div>
    </div>
    <div class="container">
      <div class="trigger">Tooltip 2</div>
      <div class="tooltip hidden">Lorem ipsum dolor sit amet...</div>
    </div>
    <script>
      const triggers = document.querySelectorAll('.trigger');
      triggers.forEach(trigger => {
        trigger.addEventListener('mouseenter', e => {
          trigger.nextElementSibling.classList.remove('hidden');
        });
        trigger.addEventListener('mouseleave', e => {
          trigger.nextElementSibling.classList.add('hidden');
        });
      });
    </script>
  </body>
</html>

Du hast sozusagen einen Container, der den Text bzw. das Icon und das Tooltip enthält und relativ positioniert ist. Das Tooltip ist absolut positioniert, um andere Elemente zu überdecken statt wie gewöhnlich zu verschieben.

Mithilfe von JavaScript reagierst du dann auf das Hinüberfahren bzw. das Verlassen des Texts oder Icons und zeigst dieses durch Umschalten der CSS-Klasse hidden an oder blendest es aus.

Das ist nur eine einfache Lösung zur Veranschaulichung, die so auch mit CSS hätte umgesetzt werden können.

Falls du dazu noch Fragen hast, stelle sie mir gerne.

LG

...zur Antwort

Hallo,

Eine konkrete Idee für eine Website habe ich nicht. Da du nach eigener Aussage allerdings über gute JavaScript-Kenntnisse verfügst, würde ich dir raten, dich mit einem Framework wie React, Angular oder Vue auseinanderzusetzen.

Die moderne Webentwicklung geht immer mehr in Richtung Single Page Applications, die ihre Daten von einer REST-API beziehen. Zumindest muss man sagen, dass Single Page Applications nutzerfreundlicher sind als herkömmliche Websites und bezogen auf größere Datenmengen deutlich weniger Traffic verursachen. Konkret würde ich dir React ans Herz legen - Man muss etwas umdenken, aber die Entwicklung gestaltet sich sehr komfortabel.

Auch die Laufzeitumgebung NodeJS ist aus der modernen Webentwicklung eigentlich nicht mehr wegzudenken. Mithilfe von NodeJS würdest du im Sinne der Webentwicklung Datenbabfragen ausführen und deine REST-API implementieren, die sämtliche Anfragen des Clients entgegennimmt und eine entsprechende Antwort (meist im JSON-Format) zurückgibt. Ich selbst habe mit PHP angefangen - nachdem ich NodeJS gelernt habe aber kaum wieder angefasst.

Wenn du nach Projektideen für JavaScript suchst, hätte ich so auf die Schnelle 3 Beispiele, mit denen ich mich selbst einmal beschäftigt habe:

  • Rich Text Editor
  • SVG Editor
  • Zeichenfläche mit vielen Funktionen

LG

...zur Antwort

Hallo,

Meine persönliche Empfehlung ist Einstieg in SQL vom Rheinwerk Verlag.

Behandelt werden die Datenbanksysteme MySQL, Microsoft SQL Server sowie PostgreSQL.

Ich habe das Buch erst vor Kurzem durchgelesen und bin sehr zufrieden. Man lernt weit mehr als nur die Grundlagen. Neben Standardoperationen wie dem Einfügen oder Selektieren von Datensätzen werden Themen wie die Performanceoptimierung besprochen.

LG

...zur Antwort