Ist das ein gutes Programm für String Suche in einer Datei (Java)?
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class StringSearchInFile {

    public static void main(String[] args) {
        String filePath = "text.txt"; // Pfad zur Textdatei
        String searchString = "gesuchterString"; // Der zu suchende String

        try {
            FileInputStream fis = new FileInputStream(filePath);
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(isr);

            String line;
            int lineNumber = 1;
            boolean found = false;
            while ((line = br.readLine()) != null) {
                if (line.contains(searchString)) {
                    System.out.println("String gefunden in Zeile " + lineNumber + ": " + line);
                    found = true;
                    break; // Abbruch nach dem ersten Fund
                }
                lineNumber++;
            }

            if (!found) {
                System.out.println("String nicht gefunden.");
            }

            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Als Lösung für ein Übungsbeispiel. Es soll das erste Vorkommen eines Text in einer Datei gefunden werden.

...zur Frage

Ich finde die Variante mit einem Scanner statt diesen ganzen Readern und Buffern und Streams übersichtlicher.

Falls die Zeilennummer nicht wichtig ist, z.B. so:

import java.io.*;
import java.util.*;
import java.util.regex.*;

public class StringSearchInFile {
    public static void main(String[] args) throws IOException {
        String filePath = "text.txt"; // Pfad zur Textdatei
        String searchString = "gesuchterString"; // Der zu suchende String

        try (Scanner scanner = new Scanner(new File(filePath))) {
            scanner.findAll(Pattern.quote(searchString)).findFirst().ifPresentOrElse(
                match -> System.out.println("String gefunden an Position " + match.start()), 
                () -> System.out.println("String nicht gefunden.")
            );
        };
    }
}

oder falls unbedingt die Zeilennummer dabei stehen soll, dann das etwas unschönere Beispiel:

import java.io.*;
import java.util.*;
import java.util.regex.*;

public class StringSearchInFile {
    public static void main(String[] args) throws IOException {
        String filePath = "text.txt"; // Pfad zur Textdatei
        String searchString = "gesuchterString"; // Der zu suchende String

        try (Scanner scanner = new Scanner(new File(filePath))) {
            int lineNr = 0;
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                ++lineNr;
                if (line.contains(searchString)) {
                    System.out.printf("String gefunden in Zeile %d: \"%s\".%n", lineNr, line);
                    return;
                }
            }
            System.out.println("String nicht gefunden.");
        };
    }
}

Allerdings schätze ich mal, dass dein Beispiel auch funktionieren müsste, daher kannst du es natürlich auch benutzen. Mir hat damals bloß immer der Kopf geraucht, wenn man z.B. für einen einfacher Userinput diese komplizierte Variante mit Readern und Buffern und Streams machen musste, anstatt einfach Scanner(System.in) benutzen zu können. Das Gleiche gilt auch für Textdateien. Der Scanner kann so ziemlich alles lesen, was du ihm hinwirfst.

...zur Antwort

Das war Anfang der 90er, als ich meinen Amiga 500 gekriegt hab. Irgendjemand hatte ein Buch über Amiga Basic und ich fand es einfach interessant, wie man einer Maschine irgendwelche Dinge beibringen kann.

...zur Antwort

Bei dem Bild sieht man ziemlich deutlich, dass es bearbeitet ist. Der Schnabel kann nicht einfach abfallen, aber bei einem Unfall oder bei anderer großer Gewalteinwirkung kann er natürlich abbrechen bzw. abreißen. Dann würde der Rest des Vogels aber auch nicht mehr besonders heile aussehen. Die Verletzung wäre vergleichbar damit, dass dir bei einem Unfall der Unterkiefer abgerissen wird. Sehr schmerzhaft und sehr blutig

...zur Antwort

Oha, das erinnert mich an meine Berufsschulzeit, wo wir auch Java lernen mussten, allerdings mit einem Lehrer, der von nichts eine Ahnung hatte und nur in einem einfachen Texteditor ohne die ganzen Features, die moderne IDEs bieten. Das war die völlige Katastrophe, weil nur das funktioniert hat, was man 1:1 vom Arbeitsblatt abgetippt hat. Und ich konnte vorher schon programmieren. Zwar nur in verschiedenen Basic-Dialekten (inklusive VBA) und in Delphi, aber zumindest war Vorwissen da.

Java hab ich später spielerisch auf codingame.com und mit dem "Java-Hamster-Modell" gelernt. Allerdings konzentriert sich CodinGame hauptsächlich darauf, aus einem bestimmten Input einen bestimmten Output zu generieren und beim Java-Hamster kommen Klassen und Exceptions auch erst im zweiten Buch vor. Der Java-Hamster ist zwar mittlerweile sehr veraltet, weil er noch auf Java-Version 7 basiert (aktuell sind wir bei Version 21), aber die Dinge, wie z.B. Klassen und Exceptions sind immernoch gültig, von daher würde ich dir erstmal empfehlen, dass du dir das mal anschaust. https://www.java-hamster-modell.de/index2.html

Ansonsten hab ich gehört, dass BlueJ wohl ein integriertes Lernprogramm haben soll. Das hab ich aber noch nie ausprobiert, daher kann ich dir da nichts genaues zu sagen.

...zur Antwort

Das ist ein Fehler in dem Programm SystemSettingsBroker.exe. Das ist ein integrierter Dienst von Windows, der anscheinend in irgendeiner Weise die Systemeinstellungen überwacht (leider findet man keine genauen Infos, wofür der Dienst gut ist)

Du kannst höchstens schauen, ob der Fehler irgendwie reproduzierbar ist. Also z.B. immer wenn du die Lautstärke am Laptop änderst, kommt der Fehler oder wenn der Computer in den Energiesparmodus geht oder so. Dann kann man genauer suchen.

Im Microsoft Forum sagt z.B. jemand, dass er den Fehler kriegt, wenn er die Bildschirmhelligkeit an seinem Laptop ändert und die vorgeschlagene Lösung ist, den "Display Enhancement Service" zu deaktivieren. Vielleicht kannst du das ja bei dir mal probieren.

  • Dienste öffnen (Aufs Startmenü klicken und dort services.msc eingeben)
  • Den dienst "Display Enhancement Service" bzw. auf deutsch "Anzeigeverbesserungsdienst" suchen
  • Auf "beenden" klicken.
...zur Antwort

Eine Wahrheitstabelle ist einfach. Du erstellst einfach eine Tabelle mit allen möglichen Eingangszuständen und schreibst zu jedem Zustand das Ergebnis auf:

a b c | x
------+--
0 0 0 | 1
0 0 1 | 0
0 1 0 | 1
0 1 1 | 1
1 0 0 | 1
1 0 1 | 0
1 1 0 | 0
1 1 1 | 0

Und das Schaltnetz ist im Prinzip einfach eine Zeichnung der Schaltung mit Logikgattern

...zur Antwort

Probier doch einfach aus, ob für den umgeformten Teil jeweils das Gleiche rauskommt



e a | x
----+--
0 0 | 1
0 1 | 1
1 0 | 0
1 1 | 1



e a | x
----+--
0 0 | 1
0 1 | 1
1 0 | 0
1 1 | 1

Kommt das Gleiche raus, also stimmt es wohl so. Mit dem q kannst du es genauso prüfen.



e a q | x
------+--
0 0 0 | 1
0 0 1 | 1
0 1 0 | 1
0 1 1 | 1
1 0 0 | 0
1 0 1 | 1
1 1 0 | 1
1 1 1 | 1

Da gibt es eine Abweichung bei e=1, a=0, q=1. Also das Endergebnis stimmt nicht mit der ersten Zeile überein. Du hast in der zweiten Zeile aber auch den "Nicht-Strich" über dem a vergessen.

Also richtig wäre



Oder wie ich es bei Gleichungen, bei denen alle Zustände außer einem Wahr sind einfacher finde:



...zur Antwort

Das Stichwort ist "OCR", bzw. optische Texterkennung. Du musst also die Bilder in der PowerPoint-Datei auf Text untersuchen lassen. Schau dir mal Tesseract an, damit scheint es ganz gut zu gehen.

https://nanonets.com/blog/ocr-with-tesseract/

...zur Antwort

Einen wirklichen materiellen Wunsch hab ich gar nicht. Mein größter Wunsch wäre es, dass ich nicht arbeiten gehen muss und einfach mehrere Monate am Stück an einem warmen Südseestrand die Seele baumeln lassen kann. Und danach nach Lust und Laune um die Welt reisen kann.

Also falls es was materielles sein soll, dann eine Reisetasche randvoll mit unmarkierten Scheinen.

...zur Antwort

1.5 a) Positive Zahlen sehen in der 2er-Komplementdarstellung genauso aus, wie in der gewöhnlichen Binärdarstellung. Die Zahl kannst du also einfach so als Binärzahl darstellen. 37 = 0010 0101

b) Ist eine negative Zahl, die musst du also ins 2er-Komplement umwandeln. Ich denke mal, in der Schule wirst du den Weg gelernt haben: 25 zu Binär umwandeln (0001 1001), alle Bits invertieren (1110 0110) und dann plus 1 rechnen (1110 0111). Ich finde es einfacher, erst plus 1 zu rechnen (-24) und dann nach binär zu wandeln (0001 1000) und die Bits zu invertieren (1110 0111)

c) Da hast du im Prinzip den umgekehrten Weg, wie in b. Daran, dass das erste Bit eine 1 ist, erkennst du, dass es eine negative Zahl ist. Also alle Bits invertieren (0110 1000) nach dezimal wandeln (104) und plus 1 (105 bzw. -105).

1.6 a) Die Zahlen kannst du einfach binär addieren.

  1100 1001
+ 0001 1110
Ü   11
  ---------
  1110 0111

b) Da kommt es drauf an, wie ihr die Subtraktion von zwei binären Werten gelernt habt.

Entweder direkt subtrahieren:

  1010 1100
- 0011 0110
Ü 111  11
  ---------
  0111 0110

Oder die zweite Zahl in eine Negativzahl umwandeln (1100 1010) und dann addieren:

   1010 1100
+  1100 1010
Ü1    1
   ---------
 1 0111 0110 

Bei der zweiten Variante siehst du deutlich, dass es zu einem Überlauf kommt. Also du ziehst von einer negativen Zahl etwas ab und es kommt eine positive Zahl raus. In diesem Fall -84 - 54 = 118, obwohl eigentlich -138 rauskommen müsste. Bei 8-Bit ist aber der kleinste darstellbare Wert -128, danach kommt der Überlauf und es geht wieder bei +127 weiter.

...zur Antwort

Das geht mit einem Makro. Nimm am einfachsten irgendein kurzes Makro auf, damit automatisch eine Makro-Datei erstellt wird und kopiere da diesen Quelltext rein:

/** @OnlyCurrentDoc */

function clear_checkboxes() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('C3:C18').setValue('FALSE');
  spreadsheet.getRange('C22:C30').setValue('FALSE');
};

Die Bereiche C3:C18 und C22:C30 musst du evtl. noch anpassen, wie sie eben bei deiner Datei sind. Das kann man in dem Bild nicht sehen.

Dann malst du dir über Einfügen>Zeichnung einen Button, und kannst da über das drei-Punkte-Menü ein Script zuweisen. Da schreibst du dann den Namen der Funktion rein (also clear_checkboxes). Beim ersten Mal, wo du das Script ausführen willst, fragt dich das Programm, ob du es erlaubst. Da musst du halt "Ja" drücken.

...zur Antwort
In 100 Jahren sind wir nicht mehr auf diesem Planeten

Meinst du damit, dass wir in 100 Jahren tot sind oder dass wir tatsächlich alle auf einem anderen Planeten sind?

Es könnte sein, dass wir bis dahin auch den einen oder anderen Exoplaneten besiedelt haben (bzw. zumindest ein Raumschiff zu einem anderen Planeten unterwegs ist), aber dass wir alle von der Erde wegkommen ist ziemlich unwahrscheinlich. Da werden ein paar 100 ausgewählte Menschen mitfliegen und die restlichen Milliarden bleiben hier.

Und die Lebenserwartung wird bis dahin sicherlich noch steigen. Selbst heutzutage werden manche Menschen über 120 Jahre alt, also gut möglich dass manche in 100 Jahren auch noch leben.

Aber ich stell sie mir so vor, statt Autos gibt's kleine fliegende Transporter für 1-2 Personen

Solange es keine "Antischwerkraft-Materie" gibt, die dafür sorgt, dass man nicht gleich abstürzt, wenn mal der Motor ausfällt, ist es eher unwahrscheinlich, dass fliegende Transporter die Autos ersetzen werden.

Ich hoffe ja eher, dass irgendeine Teleport-Technologie erfunden wird. Also vielleicht sowas, wie die Beamer in Star-Trek (man wird in seine Atome zerlegt und am Ziel wieder zusammengepuzzlet) oder so wie in Stargate (man geht durch eine "senkrechte Wasserwand" und kommt woanders raus) oder so wie in den Transport-Romanen (man steigt in den Transporter ein, drückt auf einen Knopf und ist Augenblicklich im Zieltransporter)

Aber ich stell sie mir so vor, statt Autos gibt's kleine fliegende Transporter für 1-2 Personen

Da gibt's bei vielen Rewes mittlerweile die Scan&Go Geräte. Du kannst dir am Eingang so einen Handscanner ausleihen, kannst während des Einkaufs alles scannen, was du in den Einkaufskorb legst und am Ende gehst du mit dem Handscanner zu einer Expresskasse, scannst da einen Barcode und kannst schnell per Karte bezahlen. Ich finde das echt super. Du stehst gefühlt 10 Sekunden an der Kasse und brauchst nichts auspacken.

Leider wird das System bei vielen Märkten wieder abgebaut, weil es wohl zu viele Diebstähle gegeben hat und die Barcodes nicht immer richtig erkannt werden (den Fall hatte ich aber bisher noch nicht)

Was denkst du, wie die Welt heute in 100 Jahren aussieht?

Das ist schwierig zu sagen. Wahrscheinlich wird es normal, dass man alles online kauft (inklusive Lebensmittel). Vielleicht wird auch ein roboterunterstütztes Verteilersystem gebaut, wo jedes Haus dran angeschlossen ist. Man bestellt was online, ein Lagerroboter packt es in eine Kiste und es ist innerhalb von 10 Minuten bei dir zu Hause.

Wie gesagt, eine Teleport-Technologie fände ich cool. Man steigt an seiner nächsten Bushaltestelle in eine Kapsel, gibt ein dass man an die Malediven reisen will, es macht einmal "Klack" und schon ist man dort, trinkt einen Cocktail und reist eine Stunde später wieder zurück (das würde allerdings dazu führen, dass die schönen Gegenden noch mehr von Touristen überlaufen werden, als sie es eh schon sind)

Ich denke mal, falls bis dahin noch Menschen arbeiten müssen und noch nicht alles von KI's gesteuert wird, wird man 99% der Arbeit einfach über das Internet erledigen können und muss nicht mehr jeden Tag ins Büro fahren.

Was die Notwendigkeit zu arbeiten angeht, ist es echt schwer zu schätzen. Einerseits kann es sein, dass bis dahin alle einfachen arbeiten von Robotern und Computern übernommen werden kann und man auch ohne Arbeit ein angenehmes Leben führen kann, andererseits kann es aber auch sein, dass der aktuelle Trend immer weiter geht und man zwar zahlenmäßig immer mehr Geld verdient, sich aber immer weniger damit leisten kann und nur noch in WGs in denen jeder Doppelschichten arbeitet, überhaupt über die Runden kommt.

Ich könnte mir auch vorstellen, dass die Überbevölkerung der Erde irgendwie gestoppt wird. Vielleicht werden zukünftig standardmäßig alle Menschen kurz nach der Geburt unfruchtbar gemacht und man muss eine "Pro-Baby-Pille" nehmen, um ein Kind kriegen zu können, die dann aber nur an besonders gesunde Paare abgegeben wird oder so

...zur Antwort

Wenn es kein Testament gibt, wird das Erbe gleichmäßig auf alle Erbberechtigten verteilt. Also je nachdem, wer vorhanden ist, der Ehepartner, die Kinder, die Eltern, die Geschwister, Onkel und Tanten. Wenn das Erbe nur aus Schulden besteht, werden die Schulden vererbt und die Erben müssen zahlen. Wenn man das Erbe ausschlägt, darf man gar nichts erben, also z.B. nicht einmal ein altes Fotoalbum aus der Wohnung holen.

...zur Antwort

Nein, zumindest nicht offiziell. Kann gut sein, dass man mit viel Gebastel eine andere Firmware drauf machen kann, mit der man programmieren kann.

Achtung! Der Taschenrechner ist die Sri-Lanka Variante. Ich würde dir empfehlen, die deutsche oder zumindest die englische Variante zu kaufen, wenn du die Menüeinträge verstehen willst.

...zur Antwort

Wäre gut, wenn du zur Sicherheit auch noch einen Timestamp von einem anderen Tag angeben würdest, weil ich es auffällig finde, dass z.B. 10 Stunden und 25 Minuten genau die 625 Minuten in den letzten drei Ziffern des Zeitcodes sind. Es kann also sein, dass die Zahl irgendwie aufgeteilt in Tage und Minuten ist.

Wenn es wirklich die Minuten ab Zeitpunkt X sind (der Nullpunkt wäre dann irgendwo mitten im Jahr 272, was ziemlich merkwürdig ist), würde ich den Anfang eines bestimmten Tages berechnen (z.B. 01.01.2023 = 920068640) und von da aus eben die Differenz in Minuten zu dem Datum, was du haben willst, berechnen.

Du hast nicht geschrieben, in welcher Programmiersprache du es brauchst, daher mal für Excel:

=920068640+(A1-44927)*1440

Falls das Ergebnis nur lauter ####### ist, musst du das Zellformat wieder auf Zahl umstellen. Excel versucht da ganz schlau zu sein und formatiert das Ergebnis automatisch als Datum, was es aber nicht darstellen kann.

...zur Antwort
Große Buchhandlung/Großer Supermarkt, weil...

In einem Buchladen will ich mir immer gemütlich ein paar Bücher angucken, vielleicht ein paar Seiten lesen und am Ende ein oder zwei Bücher oder auch andere Sachen mitnehmen, die mich grade interessieren. Wenn man da der einzige Kunde in einem kleinen Tante-Emma-Laden ist und die Emma zwei Sekunden nach Betreten des Ladens schon vor mir steht und mich fragt, ob sie mir helfen kann und wofür ich mich interessiere und dass sie ja letztens dieses und jenes Buch gelesen hat, was sie ja ganz toll findet, finde ich es eher nervig und muss mich überwinden, nicht gleich wieder rückwärts aus dem Laden zu stolpern. Und selbst, wenn ich ihr sage "Nein, Danke, ich will mich erstmal nur umgucken" hab ich irgendwie so ein beklemmendes Gefühl, als wenn ich in einer fremden Privatwohnung spionieren würde.

Bei Supermärkten will ich kurz und bündig meine Einkaufsliste abarbeiten und dann wieder nach Hause gehen. Das geht in der Regel besser bei großen Supermärkten, weil die alles haben und man nicht in mehrere Läden gehen muss. Wobei es die kleinen Lebensmittelgeschäfte kaum noch gibt. Höchstens Tankstellen, die auch andere Sachen verkaufen.

...zur Antwort

Am einfachsten kannst du es einfach ausprobieren:

public class TypeTest {
    public static void main(String[] args) {
        System.out.println(23.4 + 7);
        System.out.println(getType(23.4 + 7));

        System.out.println(30 - 5);
        System.out.println(getType(30 - 5));

        System.out.println((10 / 3) + 0.5);
        System.out.println(getType((10 / 3) + 0.5));

        System.out.println('a' == 'b');
        System.out.println(getType('a' == 'b'));

        System.out.println("text" == "Text");
        System.out.println(getType("text" == "Text"));

        System.out.println("Pro" + "gramm");
        System.out.println(getType("Pro" + "gramm"));

        System.out.println("ab" != "cd");
        System.out.println(getType("ab" != "cd"));

        System.out.println(6.6 / 3.3);
        System.out.println(getType(6.6 / 3.3));

        System.out.println((10 / 4) == 2);
        System.out.println(getType((10 / 4) == 2));

        System.out.println((1 / 3) * 1234567891234L); // Ohne das L am Ende kann Java die Zahl nicht compilieren
        System.out.println(getType((1 / 3) * 1234567891234L));

        System.out.println('Q' == 'q');
        System.out.println(getType('Q' == 'q'));

        System.out.println(("Progr" + "amm") == "Program");
        System.out.println(getType(("Progr" + "amm") == "Program"));

        System.out.println(11 <= (22/2));
        System.out.println(getType(11 <= (22/2)));
    }

    // Man braucht für jeden primitiven Typ eine eigene Funktion
    private static String getType(int value) {return "int";}
    private static String getType(boolean value) {return "boolean";}
    private static String getType(long value) {return "long";}
    private static String getType(short value) {return "short";}
    private static String getType(float value) {return "float";}
    private static String getType(double value) {return "double";}
    private static String getType(char value) {return "char";}
    private static String getType(byte value) {return "byte";}
    private static String getType(Object value) {return value.getClass().getSimpleName();}
}

Ergebnis:

30.4 double

25 int

3.5 double

false boolean

false boolean

Programm String

true boolean

2.0 double

true boolean

0 long

false boolean

false boolean

true boolean

Also die boolean-Werte sind so, wie NoHumanBeing es schon gesagt hat, aber bei den anderen hast du noch ein paar falsche Ergebnistypen und Ergebnisse. Am überraschendsten dürften wahrscheinlich die Ergebnisse der gemischten int- und double Rechnungen oder auch die gemischte int- und long Rechnung sein.

(10 / 3) + 0.5 = 3 (int-division) + 0.5 = 3.5
(1 / 3) * 1234567891234L = 0 (int-division) * 1234567891234 = 0

Bei der unteren Rechnung muss ich noch dazu sagen, dass Java die Zahl gar nicht kompilieren kann, wenn man nicht das L hintendran schreibt. Das L bedeutet, dass es eine long-Zahl ist, also 8-Byte anstatt 4-Byte. Wenn man es genau so eingibt, wie in der Aufgabe, wird also einfach ein Fehler angezeigt und es gibt keinen Rückgabewert.

...zur Antwort

Ja, die Sticks, die ich kenne, kann man alle an den HDMI-Anschluss anstöpseln (Amazon Fire-TV, Google Chromecast, TVPeCee). Du brauchst aber zusätzlich Strom für den Stick. Wenn du Glück hast, geht das über einen USB-Anschluss vom Fernseher oder eben mit einem alten Handyladegerät.

...zur Antwort