Heißt das, du verstehst nicht, was der Code tut?

Kurz gesagt erwartet das Programm zunächst eine Eingabe, bis zu der daraufhin in Einerschritten gezählt wird. Je Schritt erfolgt eine Ausgabe des aktuellen Schrittwerts (1, 2, 3, ...) sowie der Summe aller Schrittwerte (1, 3, 6, 10, ...).

Dies kannst du auch selbst prüfen, indem du einmal konkrete Werte einsetzt und dann dem Programmfluss folgend mitrechnest.

Die konkrete Tätigkeit und Verhaltensweise einzelner Funktionen kannst du in der Dokumentation nachschlagen.

Voraussetzung für dieses Ergebnis ist allerdings, dass die Schleife richtig geschrieben wird. Die Einrückung der Zeilen im Körper fehlt sowie der Doppelpunkt am Ende des Schleifenkopfs.

...zur Antwort

Java: Quiz-Fehler?

Hallo Leute,

ich code gerade ein kleines Quiz. Ich weiß, dass es noch nicht fertig ist, aber jetzt sollten schon mal die Antworten auf den Buttons stehen.

Code:

Fenster:

public class Fenster {
  QuizQuestion QuizQuestion;

  Quiz Quiz;

  Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();

  JLabel frage;

  static JButton ant[] = new JButton[4];

  JFrame w1;

  public static void main(String[] args) {
    new Fenster();
  }

  public Fenster() {
    w1 = new JFrame();
    w1.setSize((int) dim.getWidth(), (int) dim.getHeight());
    w1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    w1.setTitle("Quiz");
    w1.setVisible(true);
    w1.setLayout(null);

    ant[0] = new JButton("");
    ant[0].setBounds(52, 90, 120, 40);
    w1.add(ant[0]);
    ant[1] = new JButton("   ");
    ant[1].setBounds(352, 90, 120, 40);
    w1.add(ant[1]);

    ant[2] = new JButton("   ");
    ant[2].setBounds(652, 90, 120, 40);
    w1.add(ant[2]);

    ant[3] = new JButton("   ");
    ant[3].setBounds(952, 90, 120, 40);
    w1.add(ant[3]);

    updateFenster();
  }

  public void updateFenster() {
    QuizQuestion quiz = Quiz.getQuiz();
    String[] answers = quiz.getAnswers();
    ant[0].setText(answers[1]);
    ant[1].setText(answers[2]);
    ant[2].setText(answers[3]);
    ant[3].setText(answers[4]);
  }
}

QuizQuestion:

public class QuizQuestion {
  private final int correctAnswerIndex;
  
  private final String question;

  private final String[] answers;

  public QuizQuestion(String question, int correctAnswerIndex, String... answers) {
    this.question = question;
    this.answers = answers;
    this.correctAnswerIndex = correctAnswerIndex;
  }

  public String[] getAnswers() {
    return answers;
  }

  public String getQuestion() {
    return question;
  }

  public String getCorrectAnswer() {
    return answers[correctAnswerIndex];
  }
}

QuizQuestions:

public class QuizQuestions {
  private List<QuizQuestion> quizQuestions;

  public QuizQuestions() {
    this.quizQuestions = addQuizQuestions();
  }

  public List<QuizQuestion> getQuizQuestions() {
    return quizQuestions;
  }

  private List<QuizQuestion> addQuizQuestions() {
    String question = "The homeland of the Olympics is?";
    String[] answers1 = { "Mesopotamia", "Greece", "China", "Egypt" };
    QuizQuestion quizQuestion = new QuizQuestion(question, 1, answers1);
    this.quizQuestions.add(quizQuestion);
    return this.quizQuestions;
  }
}

Quiz:

public class Quiz {
  Fenster Fenster;

  QuizQuestions QuizQuestions;

  int frage = 0;

  int maxfrage;

  List<QuizQuestion> listquest;

  public Quiz() {
    maxfrage = QuizQuestions.getQuizQuestions().size();
    listquest = QuizQuestions.getQuizQuestions();
  }

  public QuizQuestion getQuiz() {
    QuizQuestion Quiz = listquest.get(frage);
    return Quiz;
  }

  public void newQuiz() {
    Fenster.updateFenster();
    frage++;
  }
}

Die Fehlermeldung:

Exception in thread "main" java.lang.NullPointerException
 at me.biberbau_99.quiz.Fenster.updateFenster(Fenster.java:54)
 at me.biberbau_99.quiz.Fenster.<init>(Fenster.java:50)
 at me.biberbau_99.quiz.Fenster.main(Fenster.java:18)
...zur Frage

Ich denke, ich kann hier auch noch einiges anfügen. Das du noch nicht fertig bist, habe ich gelesen. Ich beziehe mich daher auf den Zwischenstand und versuche Tipps zu geben, was du beachten / verbessern kannst / solltest. Auf die logischen Fehler, die bereits aufgelistet wurden, gehe ich nicht ein.

  • Bleibe stringent, nutze für Bezeichner nur eine Sprache. Du verwendest Deutsch und Englisch.
  • Halte dich an Java Code Conventions. Vergebe eindeutige, aussagekräftige Namen.
  • Definiere Variablen nur in dem Scope, in dem sie auch wirklich benötigt werden. Das Attribut dim müsste bspw. kein Attribut sein, du verwendest ja eh nur im Konstruktor.
  • Setze Sichtbarkeiten nach Möglichkeit stets explizit und restriktiv. Heißt, alle Attribute müssten private sein.
  • Mein Tipp: Initialisierungen im Konstruktor unterbringen. So sind alle Wertevergaben für Attribute übersichtlich an einem Ort.
  • Setze den Frame erst sichtbar, wenn all seine Komponenten vollständig sind. Die Methode setVisible löst das Zeichnen des Frames aus. Für Elemente, die später angehängt werden, ist ein erneutes Zeichnen notwendig, was vermieden werden kann.
  • Vergiss die Methode setBounds wieder. Es soll sie nie gegeben haben. Verwende stattdessen Layout Manager, so wie es die Oracle Dokumentation auch selbst anrät. In deinem Fall dürfte wohl ein GridLayout passen.
  • Die stärkste Waffe von Programmiersprachen sind Schleifen. Nutze sie. Beispielsweise in der updateFenster-Methode. Prüfe in diesem Fall zuvor, ob beide Arrays mindestens vier Einträge besitzen.
  • Du definierst vier Buttons für insgesamt vier Antworten doch deine Klasse für Fragen impliziert, dass es noch mehr/weniger Antworten geben kann. Dies würde ich unterbinden. Bereits der Konstruktor kann einen Fehler / eine Warnung werfen (z.B. eine IllegalArgumentException), wenn nicht genau vier Antworten gegeben sind. Nach deinem derzeitigen Stand schneidest du in der View hart ab - nutzt nur die ersten vier Antworten (bereits dies sollte wenn nur im Model oder Controller erfolgen). Wenn die richtige Antwort dummerweise in Index 4, 5, 6, ... liegt, hat der Nutzer ein Problem. Eine noch bessere Option wäre es natürlich, so viele Buttons zu erzeugen, wie es Antworten gibt. Das Array ant benötigst du nicht.
frame.setLayout(new GridLayout(1, answers.length)); // reset layout

for (String answer : answers) {
  JButton button = new JButton(answer);
  button.addActionListener(/* ... */);
  frame.add(button);
}
  • Noch etwas, was du zukünftig ruhig beachten kannst: Arbeite im Dispatch Event Thread. Erstelle den Frame in der main-Methode so:
SwingUtilities.invokeLater(new Runnable() {
  @Override
  public void run() {
    new Window();
  }
});
...zur Antwort

Helfen kann ich dir möglicherweise, wenn du mir konkreter schreiben kannst, wo dein Problem liegt oder wobei du eine Frage hast. Ich halte die Aufgabenstellung für recht eindeutig formuliert, die Sätze können wie eine Gebrauchsanleitung Schritt für Schritt durchgeführt werden.

...zur Antwort

Noch ein paar zusätzliche Anmerkungen, dein gestelltes Problem wurde ja bereits gelöst.

  • Das h1-Element gehört nicht in den head-Bereich, denn dieser beschreibt das Dokument selbst (Titel, Zeichensatz, u.ä.), jedoch nicht den konkreten Inhalt.

Korrektur:

<!DOCTYPE html>
<html>
<title>Timer</title>
<body>
<!-- ... -->
  • Ein Paragraph darf kein Kindelement eines h1-Element sein. Letzteres zeichnet bereits eine Überschrift aus, welche initial in einer eigenen Zeile steht. Verwende stattdessen ein span-Element oder gar keines (die ID kommt dann natürlich auf das h1-Element).
<h1><span id="timer">0</span></h1>
  • getElementById nimmt immer nur einen String entgegen, das hast du nicht nur bei dem Button bisher falsch gemacht.
  • Verwende innerHTML nur, wenn du wirklich Markup setzen möchtest. Die Variable time beinhaltet letzten Endes jedoch nur eine Zahl, die in einen einfachen Text ohne HTML umgewandelt wird. Das Property innerText eignet sich also besser.
timer.innerText = time;
  • Ich weiß nicht, ob es nur durch den GF-Editor so entstanden ist, zur Sicherheit zähle ich es aber mal ebenso mit auf: Trenne den Operator an dieser Stelle:
time ++;

nicht mit Leerzeichen von der Variable, schreibe es zusammen. So ist besser ersichtlich, dass die Operation an der Variable time durchgeführt wird.

...zur Antwort

Batch-Datei mit einigen Bedingungen?

Hey Leute,

im Vorhinein: Nein es handelt sich nicht um eine Hausarbeit oder Ähnliches... Ich brauche einfach Hilfe, da ich diese Aufgabe zur Übung mache.

Dies ist die Aufgabenstellung:

  1. Schreibe ein Skript, das in einem vorgegeben Pfad, die Dateien nach einem bestimmten String durchsucht. Der Pfad der gefunden Dateien soll Zeilenweise in eine Textdatei geschrieben werden.
  2. Erweitere das Skript so, dass wenn der String nicht gefunden wird, eine Meldung ausgegeben wird und das Skript beendet wird.
  3. Wenn der String gefunden wurde soll die Anzahl der betroffenen Dateien Ausgegeben werden.
  4. Erweitere das Skript um die Möglichkeit, die Dateipfade der gefunden Dateien anzeigen zu lassen.
  5. Nun soll nach dem String gefragt werden, mit dem der gesuchte String ersetzt werden soll.
  6. Nach dem der String eingegeben wurde, soll gefragt werden ob der String in allen Dateien auf einmal oder in jeder Datei einzeln ersetzt werden soll. (Ersetzen kommt in Teil 6 + 7)
  7. Das Skript soll den String in allen Dateien ohne Nachfrage ersetzen. Zusätzlich soll die Anzahl der geänderten Dateien ausgegeben werden.
  8. Das Skript soll für jede Datei einzeln nachfragen, ob der String in ihr ersetzt werden darf. Es soll zusätzlich eine Meldung ausgeben werden, ob der String in der Datei ersetzt wurde oder nicht.
  9. Zum Schluss soll der Teil des Skriptes das für das Ersetzen zuständig ist, erst nach Bestätigung des Users ausgeführt werden. Will der User nicht ersetzen wird das Skript beendet und eine Meldung ausgegeben.

Soweit bin ich aktuell:

@echo off
cd /d D:\Bereiche\Standardapplikation\Skript-Aufgabe\workspace1\logs
del /q /f "C:\Users\SpraulT\Desktop\test.txt" 2>nul

for /f "tokens=" %%i in ('dir /b /s .txt') do (
  findstr /i /n /c:"nocturne-s01" "%%i" >nul 2>&1 && (
    echo %%i >> "C:\Users\SpraulT\Desktop\test.txt"
  )
)
if not exist "C:\Users\SpraulT\Desktop\test.txt" (
  echo Es wurde keine Treffer erzielt
)
pause
exit /b   

Vielleicht kann mir jemand die Lösung oder Ansätze bereitstellen, da ich schon bei Punkt 2 scheitere. Ich brauche einfach Unterstützung. Die Lösung möchte ich selber finden.. aber ich benötige eben Hilfe.

Vielen Dank



...zur Frage

Ein paar Ansätze:

Zu 2) Prüfe den ERRORLEVEL. Er wird bei keinem Fund von findstr auf den Wert 1 gesetzt.

if errorlevel 1 REM your output ...

Zu 4)

Da gibt es vermutlich einen passenden Parameter. Schau mal in die Dokumentation.

Zu 5 + 6) Einfache Ausgabe (echo) und Eingabe (set).

Zu 7 + 8) String in Datei suchen und ersetzen:

https://stackoverflow.com/questions/23075953/batch-script-to-find-and-replace-a-string-in-text-file-without-creating-an-extra/23076141

...zur Antwort

Vielleicht noch auf denen von ENCOM. 😜

Ich vermute mal eher, du meinst Webseiten / Plattformen, wie:

  • StackOverflow
  • GitHub
  • Quora
  • StackExchange
  • CodeProject
  • Reddit
  • CodeRanch
  • CodeGuru
  • </dream-in-code>
  • BitBucket
  • Hackr

Soweit Beispiele, wo wirklich sehr viele Programmierer zu finden sind. Mehr spezialisierte Plattformen wie das Forum für Unity3D oder das Forum für Microsoft Produkte (.NET / C# / VB.NET) rechne ich an dieser Stelle einmal nicht konkret mit ein.

Viele Programmierer findest du natürlich noch auf anderen Seiten, hier auf GF zum Beispiel. Auf Twitter tummeln sich vermutlich ebenfalls einige herum, man muss nur den richtigen Hashtag erwischen.

...zur Antwort

Zuerst einmal möchte ich bei der Frage nach dem Verursacher einhaken: Ein Programmierer setzt in der Regel nur bereits gestellte Anforderungen um. Für Designkonzepte sind Designer verantwortlich.

Ich sehe mehrere Gründe, die es für diese Entscheidung gegeben haben könnte:

  • Vereinfachung und Reduktion: Der Kreis ist eine einfache Form. Viele Fotos/Bilder haben nur einen bestimmten Fokuspunkt (z.B. dein Gesicht), alles andere drumherum ist unwichtige Information, die man wegschneiden kann. Gerade bei Profilbildern hat man das oft. Bei einem Rechteck hingegen wäre es schwieriger.
  • Ästhetik: Tatsächlich wirken runde Formen auf viele Menschen schöner als eckige Formen. Lies hier.
  • Dynamik / Textfluss / Weißraum: Ein rundes Bild fügt sich einfacher ein, denn es wirkt nicht so klobig wie ein Rechteck und bietet zudem bereits einen eigenen Weißraum, der von anderen Elementen trennt. Ein Beispiel dafür siehst du bei den Profilbildern der einzelnen Antworten. Ein Rechteck nimmt mehr Platz ein.
  • Button-Style: Es ist wie ein Ansteckbutton, der die Botschaft übermittelt Ich bin ....

Ich kann mir allerdings gut vorstellen, dass es durchaus auch einige Leute gibt, die diesen Stil gedankenlos abkopieren, unter anderem, um im allgemeinen Zeitgeist aktuell zu bleiben.

...zur Antwort

Wenn du ein Projekt in Visual Studio erstellst, wird eine csproj-Datei sowie (nach dem ersten Speichern) eine Solution-Datei (sln) angelegt. Öffne diese - vorzugsweise letztere.

Solltest du neue C-Sharp-Dateien nicht in Visual Studio anlegen, sondern bspw. manuell im Projektordner, musst du sie im Solution Explorer noch dem Projekt zufügen. In der oberen Menüleiste des Solution Explorers gibt es einen Button zum Anzeigen aller Dateien im jeweiligen Ordner. Dateien, deren Icon blass dargestellt ist, sind noch nicht in der csproj-Datei eingetragen. Klicke sie mit rechts an und wähle im Kontextmenü den Punkt, Hinzufügen zum Projekt (o.ä.). Speichere danach das Projekt.

...zur Antwort

Eine erste gute Quelle sind die Bücher von Robert Martin über Clean Code und Architecture.

Weiterhin kannst du meine Antworten zu Fragen wie diesen durchlesen:

  •  Java, wieso werden Methoden nicht in der richtigen Reihenfolge programmiert?
  • Was sind die Anforderungen an einen brauchbaren Code?

Zur Projektstruktur würde ich dir ebenso anraten, dich mit Design Patterns zu beschäftigen. Crysali hat ja bereits eine Seite mit Tutorials zu diesen verlinkt.

Mit Tools wie die, die dir UML bietet, kannst/solltest du deine Programmstruktur bereits im Voraus planen. Schau einmal hier für Anwendungen, mit denen man solche Diagramme gut anlegen kann.

Ein letzter guter Tipp, dem man öfter folgen kann: Keep it simple.

--------------------

Die Beschreibung deines Projekts lässt sich leider nicht ganz nachvollziehen. Informationen wie diese:

(...) die Main Methode ruft auch eine Methode auf welche in Schleife läuft aber auf einem 2. thread (...)

kann ich nicht recht einordnen. Ist das nun irgendwie wichtig?

Ich glaube, man kann dein Programm so zusammenfassen, dass jeder von dir erstellte Frame einen Button hat, mit dem ein anderer Frame kreiert wird. Was ich nicht verstehe, ist, dass du dafür jedesmal eine Methode der Starter-Klasse aufrufst. Dies impliziert, dass diese wohl statisch sind. Das ist allerdings ein Umweg, der auch nicht ganz logisch erscheint. Erstelle die Objekte doch direkt im jeweiligen ActionListener.

Wenn es jedoch einer Frame-Verwaltung benötigt, lege eine entsprechende Klasse an und übergebe eine Instanz derer an die jeweiligen Frames:

class FrameManager {
  public void createFrame1() {
    new YourFrame(this);
  }

  public void createFrame2() {
    // ...
  }

  public void createFrame3() {
    // ...
  }
}

class YourFrame1 extends JFrame implements ActionListener {
  private FrameManager frameManager;

  public YourFrame(FrameManager frameManager) {
    this.frameManager = frameManager;
  }

  // button actionperformed:
  this.frameManager.createFrame2();
  // ...
}

// main:
FrameManager frameManager = new FrameManager();
frameManager.createFrame1();     

Statische Elemente solltest du nur verwenden, wenn sie logisch passen. Lies dazu auch hier, auch wenn es da du nur statische Attribute geht.

Eine sich selbstständig wiederholende/erneuernde Kette (habe ich dich so richtig verstanden?) erzeugst du mit deinem Programm jedoch nicht. Wenn ein Frame geöffnet wird, ist die jeweilige Methode, die ihn erzeugen lassen hat, doch beendet. Diese Kette (Öffnen der Frames) wird nur durch das Klicken auf die jeweiligen Buttons instand gehalten. Was Frame 3 nun tut, hast du auch gar nicht geklärt.

Deine Intention ist es nun, wenn ich das richtig verstanden habe, bei Klick auf den Button von Frame 1, diesen zu schließen und dafür Frame 2 zu öffnen. Das Gleiche soll wohl auch beim Wechsel von Frame 2 auf Frame 3 erfolgen.

Entweder du übergibst dafür den alten Frame (Frame 1) an den neuen (Frame 2) und schließt ihn letztendlich dort:

public Frame2(JFrame frame) {
  frame.dispose();
}

oder du lässt bei Buttonklick den Frame sich selbst schließen und hängst zuvor noch einen WindowListener an das Objekt, welcher darauf wartet, dass sich das Fenster schließt. In diesem Listener wird der neue Frame erstellt / geöffnet.

Eine letzte Alternative wäre noch die Verwaltung durch ein drittes Objekt, wie oben mit dem FrameManager dargestellt / angedeutet.

...zur Antwort

Also Fragen, wie man Demotivation überwinden kann, wurden hier ganz sicher schon oft gestellt und beantwortet. Bitte benutze einmal die Suche rechts oben.

Themen wie Arrays oder Schleifen werden auch weiter schwierig für dich bleiben, solange du es nicht übst. Vielleicht lernst du aber auch noch falsch / hast noch keine optimale Lernmethodik für dich gefunden. Günstig ist es bspw. zu Tageszeiten, an denen du dich am leistungsfähigsten fühlst. Das ist bei jedem unterschiedlich.

Eine gute Seite zum Üben von Schleifen / Arrays u.ä. ist CodingBat. Diese ist allerdings für die Sprachen Java und Python ausgelegt. Du müsstest die Aufgaben in C++ übertragen.

...zur Antwort

Dein HTML sieht ziemlich zerschossen aus.

  • Der link-Tag gehört in den head
  • Du hast für den link-Tag eine SASS-Datei verlinkt. Aber hast du denn auch ein Tool integriert, welches die Datei für dich in CSS übersetzt? Der Browser übersetzt es so nicht automatisch für dich und der Mimetype wäre an dieser Stelle auch noch falsch, SASS sollte (meines Wissens nach) text/x-sass oder text/x-scss haben.
  • Der body-Tag gehört mitsamt seiner Kindelemente in das html-Tag, welches du zu früh (und zu oft) schließt
  • Der schließende Tag für das caption-Element ist unvollständig

Zu deinem Problem:

Ich stelle an dieser Stelle zwei mögliche Lösungen vor.

a) Du fügst jedes Element, welches initial nicht sichtbar sein soll, in ein span-Tag ein:

<td><span>some text</span></td>

und setzt dessen Sichtbarkeit:

td span { visibility: hidden; }

Über die Pseudoklasse :hover wird der Zustand wieder geändert, so lange die Maus über dem td-Element liegt.

td:hover span { visibility: visible; }

b) Du wechselst die Schriftfarbe:

td { color: transparent; }
td:hover { color: black; }

Ich habe meine Beispiele nun stets auf das td-Element bezogen. Wenn du aber andere Elemente auswählen möchtest, brauchst du ja nur den Selektor etwas zu ändern.

...zur Antwort

Moment - du möchtest doch zwei Buttons auf einer Webseite ausgeben, verstehe ich das richtig? Dies ist doch in der Dokumentation beschrieben: https://apidock.com/rails/ActionView/Helpers/FormBuilder/button

...zur Antwort

Speicherst du etwas Markup und Styles mit in der Datenbank? Wenn ich das falsch sehe, überspringe den folgenden Teil.

Wenn dem aber so sein sollte, würde ich dir sehr davon abraten. Warum, merkst du bereits jetzt, bei dem aktuellen Problem. Denn um es zu ändern, musst du erst an die Daten kommen und diese verhältnismäßig aufwendig bearbeiten. Würdest du Model (die reinen Textdaten), View (Markup, CSS) und Logik (PHP u.ä.) klarer voneinander trennen, bräuchtest du für so eine Änderung nur den zugehörigen CSS-Selektor heraussuchen und eine einzige Zahl anpassen. Deine Anwendung wäre flexibler, einfacher wartbar, flexibler und übersichtlicher. Ausnahmen könnten eher Tags wie i, b oder span sein. Inline-Styles würde ich allerdings gegen class-Attribute austauschen, sodass die Elemente jederzeit einfach über die CSS-Datei wieder geändert werden können.

Es sollte ein HTML-Template geben, in welches du die Daten mit PHP einfach nur einsetzt.

Beispiel:

<?php
  $blogData = readBlogDataFromDatabase();

  for ($i = 0; $i < count($blogData); ++$i): ?>
    
    <div>
      <h3><?= $blogData["title"] ?></h3>
      <p><?= $blogData["content"] ?></p>
    </div>

<?php endfor; ?>

Alles Weitere geschieht im CSS-Teil.

...zur Antwort

Deine PHP-API funktioniert also bereits? Du kannst mittels einer URL einen GET-/POST-Request verschicken und eine valide Antwort kommt zurück?

Für den Request, den du mit C++ verschicken möchtest, kannst du nun eine Bibliothek wie curlpp verwenden. Verschiedene Beispiel für dessen Gebrauch findest du hier.

...zur Antwort

Was würdest du denn denken? Könnte er eine zweite Chance deiner Meinung nach nutzen und seine Eifersucht endlich ablegen? Ganz ehrlich?

Nach dieser Bewertung würde ich handeln, wenn ich du wäre. Wenn du denkst, dass er es kann, wäre es vermutlich einen neuen Versuch wert. Wenn es bereits häufiges Streitthema bei euch war, würde ich die Chancen einer Besserung als ziemlich gering werten, einen erneuten Kontakt also nicht mehr aufbauen.

In die Fragen / Bewertung solltest du zudem noch einbeziehen, dass er sich im direkten/persönlichen Umgang (also im RL) vielleicht noch anders verhält und möglicherweise sogar extremer eifersüchtig sein könnte (wie ich deinen Kommentar verstanden habe, kennt ihr euch bisher noch nicht persönlich). Solange ihr euch nur schreibt, ist seine Kontrolle über dich noch eingeschränkt.

Falls du einen Neuanfang mit ihm versuchen möchtest:

Hierbei ist für mich nicht klar, wer denn nun die Beziehung beendet hat. Du oder er? Wenn er es war, ist es gut möglich, dass er dich gar nicht mehr zu Wort kommen lässt oder gar eine Entschuldigung fordert (die du ihm wirklich nur dann geben solltest, falls du ihn zuletzt wirklich beleidigt hast, o.ä..). Mache dir daher bewusst, welchen Einsatz du gibst.

Da ihr wahrscheinlich bisher immer nur geschrieben habt, gibt es keine andere Möglichkeit der Wiederkontaktaufnahme. Du könntest ihm in einer Nachricht mitteilen, dass du nach langem Überlegen zu dem Schluss gekommen bist, dass du dir einen Neuanfang vorstellen könntest. Zuzüglich wäre es wichtig, dass du formulierst, wie du dich fühlst, wie du dich gefühlt hast und welche Erwartungen du an die Zukunft hast. Du könntest Verständnis für sein Verhalten vermitteln, solltest dann im gleichen Zug aber auch Grenzen setzen.

Beispiel:

Ich verstehe, dass du eifersüchtig bist. Manchmal bin ich das auch, bspw. als ... (Erfahrungsbericht / Anekdote) ... . Nur habe ich gemerkt, dass das nicht gut ist, denn es schränkt andere Menschen ein und verhindert den Aufbau eines ernsthaften Vertrauensverhältnis. Ich würde mir wünschen, dass dies bei uns nicht so ist/wäre. Dann würde ich mich gut fühlen.
...zur Antwort
  • Das Runde geht ins Nasse
  • Nasse Verlängerung
  • Eine nasse Erfahrung
  • Der glücklose Balljunge / Ein glückloser Balljunge
  • Zuerst hatte er kein Glück, und dann kam auch noch Pech dazu.
  • Ein Kopfstoß zu viel
...zur Antwort