Zuerst eine Anmerkung: Qt ist ein Eigenname.

Herunterladen kannst du Qt hier.

Das Rootverzeichnis dient später der Angabe für das Plugin. Lies dazu hier: Qt VS Tools - Managing Project versions.

...zur Antwort

Du müsstest entweder die erste Zeile der Datei auslesen und anhand des Trenners aufsplitten oder dir nur die Zeilenanzahl in der Datei besorgen (indem du alle Zeilen ausliest). Wie das geht, weißt du eigentlich schon.

Diesen Wert vergleichst du mit der Nutzereingabe.

...zur Antwort

Diese Prüfung lässt sich abstrahieren.

const commands = [ 'ping', /* other commands ... */ ];

for (const command of commands) {
  if (message.content.startsWith(`${prefix}${command}`)) {
    client.commands.get(command).execute(message, args);
    break;
  }
}
...zur Antwort

.NET verfügt über eine Math-Klasse, die unter anderem auch eine Methode zur Berechnung der Quadratwurzel bietet.

https://docs.microsoft.com/de-de/dotnet/api/system.math.sqrt?view=net-5.0

double someValue = // ...
double result = Math.Sqrt(someValue);
...zur Antwort

Ich gehe davon aus, dass die CSV-Datei aus acht Zeilen mit jeweils acht Einträgen besteht.

Du musst die Datei zeilenweise auslesen. Jede Zeile wird anhand der Trennzeichen aufgespalten. Du kannst die split-Methode der String-Klasse dafür verwenden. Dabei kommt ein Array heraus. Jedes Element dieses Arrays kannst du folgend zu einer Zahl casten und dann in die Matrix schreiben.

Pseudocode:

for y = 0, y < matrix.length && hasNextLine(), ++y:
  // read line ...
  values = line.split(',')

  for x = 0, x < matrix[y].length && x < values.length, ++x:
    matrix[y][x] = toDouble(values[x])
...zur Antwort

Du brauchst zuerst eine Referenz auf das Form-Objekt, welches gezeigt werden soll.

Im folgenden Beispiel kreiere ich einfach ein neues Objekt einer Form1-Klasse:

Form form = new Form1();

Danach muss die Show-Methode aufgerufen werden, um die Form sichtbar zu machen.

form.Show();

Ich kann dir folgend nur empfehlen, dich mit der objektorientierten Programmierung auseinanderzusetzen, bevor du mit Windows Forms weitermachst. Du brauchst diese Kenntnisse, denn darauf baut alles auf.

...zur Antwort

Das Schlüsselwort this verweist auf das Objekt, über welches die Methode aufgerufen wurde.

Beispiel:

class Car {
  private float fuel = 1.0f;

  public void drive() {
    this.fuel = 0;
  }
}

// main:
Car car = new Car();
car.drive();

Beim Aufruf von drive wird implizit auch eine Referenz auf car an die Methode übergeben, auf die dann mit dem Schlüsselwort this zugegriffen werden kann. So kann auch der Zustand des Objekts verändert werden, weil über this Zugriff auf die Eigenschaft fuel besteht.

Noch einmal zum Vergleich: Wenn es this nicht geben würde, müsste man stets so vorgehen:

public void drive(Car car) {
  car.fuel = 0f;
}

// call in main:
car.drive(car);

Zuletzt noch ein Hinweis: Beachte, dass this immer nur im objektgebundenen Kontext existiert. Eine statische Methode kennt also kein this, da sie über die Klasse aufgerufen wird. Nicht über ein Objekt.

...zur Antwort

Das heißt, es wartet etwas Stringbearbeitung auf dich.

So wie ich das sehe, könntest du den Befehl anhand des Backslash auftrennen (siehe split-Methode der String-Klasse). Der erste Eintrag des Ergebnisarray wird verworfen. Wenn du den Nutzernamen brauchst, kannst du ihn dir bspw. mit einem regulären Ausdruck und einer Gruppe herausfiltern.

Zu regulären Ausdrücken kannst du hier Implementationsdetails nachlesen. Auf regex101 kannst du Ausdrücke testen.

Der nächste Schritt wäre die Auftrennung von Parameter und Wert (je Arrayelement). Entweder du splittest erneut via Leerzeichen (das geht aber nur, wenn bspw. der Text aus dem Textfeld kein Leerzeichen enthalten darf) oder du suchst mit indexOf nach dem ersten Leerzeichen, um daraufhin mit substring den vorderen Teil herauszubrechen.

Eine weitere Option wäre erneut ein regulärer Ausdruck:

\-([a-z])\s+\(([A-Za-z0-9\s]*)\)

In Group 1 hättest du dann den Parameternamen und in Group 2 den Wert.

Dieses Schlüssel-Wertepaar würde ich mir in einer Map speichern (konkret z.B. in einer HashMap).

...zur Antwort

Um die CSS-Properties dieses Selektors zu überschreiben, musst du nach dem Bootstrap-CSS einen mindestens gleichrangigen CSS-Selektor kreieren. Dann kannst du den Properties ihre Standardwerte (o.ä.) zuordnen.

@media (min-width: 992px) {
  .navbar-expand-lg {
    -ms-flex-flow: row nowrap;
    flex-flow: row nowrap;
    -ms-flex-pack: start;
    justify-content: normal;
  }
}

Auf MDN kannst du zu den jeweiligen CSS-Properties die jeweiligen Standardwerte nachschlagen.

Dazu noch ein Rat, da verschiedene Quellen in diesem Zuge oft die !important-Regel anführen: Beim Überschreiben würde ich dir raten, sie nach Möglichkeit nicht zu verwenden (wenn es vermeidbar ist). Da sie die höchste Spezifität herstellt, lässt sie sich nur schwer wieder überschreiben, falls das an bestimmter Stelle notwendig sein sollte. Es regt also mehr dazu an, das eigene CSS langsam komplizierter werden zu lassen.

Würde aber gerne den Wert aus meiner CSS-datei heraus überschreiben.

Dieser eine Wert (min-width des Media Queries) lässt sich nicht überschreiben. Du musst, wie schon von mir geschrieben, den gesamten Selektor überschreiben, indem du ihn neu definierst.

Eine andere Option hättest du womöglich, wenn du mit LESS oder SASS / SCSS arbeitest und Bootstrap an der Stelle (für min-width) eine Variable setzt. Dann könntest du diese überschreiben und somit sorgen, dass der Media Query bspw. für eine min-width 500 (oder irgendeinen anderen Wert) gilt. Zu beachten wäre dabei aber auch, dass so eine Änderung noch viele weitere Stellen beeinflussen / verändern würde (eben da, wo die Variable überall eingesetzt wird).

Und damit das Hamburger Menü immer anzeigen und nicht nur für kleine Bildschirme

Der von dir gezeigte Selektor hat damit allerdings wohl nicht wirklich etwas zutun.

...zur Antwort

So lange überhaupt kein allgemeiner Lösungsweg bekannt ist, braucht man sich noch lange nicht mit Quellcode beschäftigen.

Teile dir die Aufgabe auf, erstelle die Knoten zeilenweise. Sobald die Knoten einer Zeile existieren, kannst du sie miteinander verbinden. Für all diese Operationen (erstellen der Knoten, Schaffen der Verbindungen), wird der Graph bereits entsprechende Methoden kennen.

Wenn alle Zeilen gebaut wurden, kannst du durch die Spalten laufen, um auch die vertikalen Verbindungen zu knüpfen.

Letzten Endes gestaltet sich die Aufgabe als Schleifenübung. Wenn deines Erachtens erforderlich, können dir Arrays (eindimensional/zweidimensional) als Zwischenspeicher helfen.

Um den Vorgang im Voraus genauer zu planen, würde ich empfehlen, einen Programmablaufplan anzulegen.

...zur Antwort

a) Entferne den Style.

b) Bau, wie schon in der zweiten Antwort auf SO empfohlen, eine eigene ComboBox mit XAML zusammen. Das AeroDesign benötigst du dafür nicht zwingend. Schau dir diese Lösung an.

...zur Antwort

1) Bei

validateVertex(v);

würde ich eigentlich einen Rückgabewert erwarten, der verrät, ob der Vertex valid ist oder nicht. Je nachdem, dürfte sich dann auch die Rückgabe der pathTo-Methode verändern.

2) Vergib ausdrucksstärkere Namen, statt v, p, u.ä..

3) Ich würde nicht unbedingt null zurückgeben, wenn es keinen Pfad gibt. Eine leere Liste wäre doch sicherlich auch in Ordnung und würde dem Aufrufer letzten Endes auch einen null-Check ersparen.

...zur Antwort

1) Überlege dir zwei bis drei Methoden für die geforderten Klassen und wie sie implementiert werden könnten. Tatsächlich würde ich diese Aufgabe als die Schwierigste bezeichnen, da sie ein wenig Kreativität fordert. Vielleicht hilft dir Brainstorming mit einer Mindmap.

Spontan würde mir der Verbrauch von Treibstoff / Energie beim Fahren einfallen. Eine Methode Drive könnte dafür sorgen, dass sich der Treibstoff verringert. Eine weitere Methode fillUp sorgt für das Wiederauffüllen.

Noch eine andere plumpe Idee wäre die lautmalerische Rückgabe des Tons, den das Fahrzeug beim Fahren macht. Während ein Elektroauto vielleicht schnurrt (zzzz), ist das Motorrad lauter (wroam wroam). 😁

2) Damit eine Klasse von einer anderen Klasse erbt, muss die Basisklasse im Klassenkopf aufgeführt werden.

class Base
{
}

class Sub : Base
{
}

Hier ist es die Klasse Sub, die von Base erbt.

Zusätzlich können aber noch bestimmte Pflichten auf die Subklasse zukommen, denn sobald ein Objekt von Sub angelegt wird, wird beim Konstruktoraufruf auch implizit der Konstruktor der Basisklasse aufgerufen.

Wenn die Basisklasse nun ihren Standardkonstruktor überschreibt:

class Base
{
  public Base(int someValue)
  {
  }
}

hat der Compiler ein Problem. Wenn der Konstruktor nicht mehr parameterlos ist, muss jemand definieren, welche Werte übergeben werden sollen. Die verfügbaren Konstruktoren von Sub müssten das übernehmen.

classs Sub : Base
{
  public Sub() : base(123)
  {
  }
}

Das heißt, der Konstruktor der Basisklasse wird nun nicht mehr implizit, sondern explizit aufgerufen.

Anstatt eines konstanten Wertes könnte man natürlich auch einen Parameter übergeben:

class Sub : Base
{
  public Sub(int someValue) : base(someValue)
  {
  }
}

Ein komplettes Kapitel über Vererbung findest du hier. Mein Text war nur ein sehr kurzer technischer Anschnitt, wie man die Verbindung herstellt.

...zur Antwort

Backslashes im Dateipfad musst du maskieren. Setze ein @ vor deinen String.

@"C:\Users\..."

Der nächste Schritt wäre sicherzustellen, ob der Dateipfad richtig und die Datei nicht durch irgendwelche beschränkten Zugriffsrechte geschützt ist. Visual Studio als Administrator auszuführen (wenn du dein Programm darüber startest), kann in letzterem Fall oft schon ausreichend helfen.

...zur Antwort

Du musst den Namespace noch angeben, in dem die Encoding-Klasse zu finden ist.

using System.Text;
...zur Antwort

Der Wert, den du mit return zurückgibst, landet in einem anderen Kontext, als du erwartest.

Dazu ein kleines Beispiel:

function saySomething(callback) {
  console.log("I say: " + callback());
}

const result = saySomething(function() { return "Hello" });
console.log(result);

Wie du hier siehst (bzw. wenn du das Beispiel einmal testest): Der Wert "Hello" landet im Funktionskontext von saySomething. Er gelangt nicht in den aufrufenden Kontext (zu result), denn dort wird der Callback gar nicht ausgeführt.

Genauso verhält es sich bei deinem Programm. Die Funktion, die du an query übergibst, wird in query auch aufgerufen (nachdem sie das Ergebnis aus der Datenbank ermittelt hat).

Du könntest nun getUser selbst einen Callback übergeben:

getuser = function(userid, guildid, callback) {
  /* ... */
  
  con.query("...", function (err, result, fields) {
    if (err) throw err;
    var c = result[0].id;
    callback(c);
  });
});

// call:
const lib = require("./functions.js");
getuser(message.author.id, message.guild.id, function(c) {
  /* do something ... */
});

Oder du beschäftigst dich mit Promises und await/async.

...zur Antwort

Ein Sprite ist eine Grafik, die über dem Hintergrund gerendert wird. Sie kann animiert sein, muss es aber nicht.

Hierfür ein Beispiel: Du hast ein 2D-Spiel, in dem der Spieler durch einen Wald stapft. Es gibt also eine Hintergrundgrafik für den finsteren Wald. In der Vordergrundebene können nun einzelne Elemente (z.B. ein Lagerfeuer, ein Wegweister, o.ä.) positioniert werden (= Sprites).

Ursprünglich wurden Sprites explizit nur von der Hardware für die Computergrafik erzeugt. Heutzutage werden auch Grafiken mit einbezogen, die auch von der Software erstellt werden.

Sequencing beschreibt eine Abfolge von Elementen oder Anweisungen, die hintereinander abgearbeitet werden.

Zum Debugging von JavaScript im Chrome Browser findest du genügend Informationen in der offiziellen Dokumentation. Wenn du eine Anleitung für andere Browser (wie Firefox) benötigst, suche in deren Manual.

...zur Antwort

Zuerst einmal müsstest du wohl ermitteln, welche Formelkonstellationen es alle gibt, bei denen jeweils nur drei bekannte Werte existieren.

Bei der Berechnung der Oberfläche:

zähle ich insgesamt vier Variablen. Es könnten O, a und b bekannt sein oder O, a und c oder a, b und c, oder ....

Für all diese Fälle müsste die Formel so umgestellt werden, sodass die einzig noch verbleibende Unbekannte berechnet werden kann. Das Gleiche gilt dann ebenso für die Volumenberechnung, die, soweit ich das sehe, sogar schon bei der Oberflächenberechnung dazugezogen werden können soll.

Das erfordert alles in allem nur mathematische Kenntnisse.

Die Umsetzung mit Python danach ist nicht so schwer. Diese Kenntnisse sollten genügen:

1) Mit der input-Funktion kann eine Zeichenkette von der Konsole gelesen werden. Mit der float-Funktion gelingt eine Konversion in einen numerischen Typ (eine Fließkommazahl).

number = float(input("Bitte gib einen Wert ein: "))

Der Wert wird in diesem Snippet einer Variable namens number zugewiesen.

2) Die unbekannten Werte, die von deinem Programm berechnet werden sollen, werden mit dem Platzhalterwert -1 vom Nutzer angegeben. Das heißt, du musst ermitteln, welche Variablen mit -1 gekennzeichnet wurden, um zu erfahren, was du berechnen kannst.

Zustände kann man mit if-elif-else prüfen, wobei elif und else für so eine Struktur optionale Blöcke sind.

Beispiel:

number = 2

if number == 5:
  print("Number is 5.")
elif number == 2:
  print("Number is 2.")
else:
  print("Number is neither 5 nor 2.")

Da du damit rechnen musst, dass entweder das Volumen oder die Oberfläche ebenfalls den Wert -1 hat, wirst du logische Verknüpfungen aufstellen müssen. Es gibt and, not und or.

Beispiel:

number = 1

if not number == 2 and not number == 3:
  print("Number is neither 2 nor 3.")

if number == 4 or number == 1:
  print("Number is either 4 or 1.")

3) Für die mathematischen Berechnungen stellt Python verschiedene Operatoren zur Verfügung (siehe Arithmetic Operators) und im math-Modul (siehe hier) findest du bei Bedarf noch Funktionen für komplexere Aufgaben.

Zuletzt noch ein Rat:

Mache dir, bevor du mit der Programmierung beginnst, erst separat Gedanken über den Ablauf. Schreibe ihn auf / skizziere ihn (bspw. mit Hilfe eines Programmablaufplans). Es wird dir den Teil mit der Programmierung vereinfachen. Ziel sollte es sein, den logischen Ablauf bereits zu kennen und dann nur noch in Python-Code übersetzen / formulieren zu müssen. So, als würdest du einen deutschen Text in die englische Sprache übersetzen wollen.

...zur Antwort

Discord.js - Auf andere Nachrichten reagieren?

Hi, ich habe folgenden Code:

const args = message.content.slice(prefix.length).trim().split(' ');
const id = args[1]
const msg = message.channel.messages.fetch(id)
const emname = args[2]
const emoji = message.guild.emojis.cache.find(em => em.name === (emname))
msg.react(emoji)

Nur kommt da als Anwort:

TypeError: msg.react is not a function
   at Object.execute (/opt/BOTs/QuickPlayHost-sy/commands/react.js:19:8)
   at Client.<anonymous> (/opt/BOTs/QuickPlayHost-sy/quickplayhost-sy.js:256:32)
   at Client.emit (node:events:406:35)
   at MessageCreateAction.handle (/opt/BOTs/QuickPlayHost-sy/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
   at Object.module.exports [as MESSAGE_CREATE] (/opt/BOTs/QuickPlayHost-sy/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
   at WebSocketManager.handlePacket (/opt/BOTs/QuickPlayHost-sy/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
   at WebSocketShard.onPacket (/opt/BOTs/QuickPlayHost-sy/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
   at WebSocketShard.onMessage (/opt/BOTs/QuickPlayHost-sy/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
   at WebSocket.onMessage (/opt/BOTs/QuickPlayHost-sy/node_modules/ws/lib/event-target.js:132:16)
   at WebSocket.emit (node:events:394:28)
   at Receiver.receiverOnMessage (/opt/BOTs/QuickPlayHost-sy/node_modules/ws/lib/websocket.js:834:20)
   at Receiver.emit (node:events:394:28)
   at Receiver.dataMessage (/opt/BOTs/QuickPlayHost-sy/node_modules/ws/lib/receiver.js:437:14)
   at Receiver.getData (/opt/BOTs/QuickPlayHost-sy/node_modules/ws/lib/receiver.js:367:17)
   at Receiver.startLoop (/opt/BOTs/QuickPlayHost-sy/node_modules/ws/lib/receiver.js:143:22)
   at Receiver._write (/opt/BOTs/QuickPlayHost-sy/node_modules/ws/lib/receiver.js:78:10)

Was läuft da falsch?

...zur Frage

Die Fehlermeldung selbst ist eindeutig. Folgendermaßen kann man davon ausgehen, dass msg kein Message-Typ ist, was sich leicht prüfen lässt. Beispielsweise, indem man erst einmal schaut, was fetch überhaupt zurückgibt.

Returns:  Promise < Message > Promise < Collection < Snowflake Message >>

Quelle

Folgendermaßen müsstest du das Promise erst auswerten, um an die einzelnen Message-Elemente zu gelangen.

const fetchedMessages = message.channel.messages.fetch(id);
fetchedMessages.then(fetchedMessage => {
  const emname = args[2];
  const emoji = message.guild.emojis.cache.find(em => em.name === (emname));
  fetchedMessage.react(emoji);
})
.catch(console.error);
...zur Antwort