Meine Hash-Map ist nicht effizient

Kannst du bitte linksbündig schreiben?

Weil man die erzeugte scanner-Instanz einfach nochmal verwenden kann.

Das Problem ist, dass du glaube ich dir noch nicht den Weg überlegt hast den du gehen möchtest.

Was du machst:

Scanner anlegen. Ok
Dann der Fehler mit der eingabe, denke ich korrigierst du.
Dann instantiierst du einen neuen Scanner mit einem String der aus einem anderen Scanner kommt. Woher kommt dieses Konstrukt? Und vor allem, was soll da rauskommen?

Lies doch einfach nextLine in eine String variable und dann schau mal weiter

du meinst wohl eher
String s = eingabe.nextLine().toLowerCase();

Wieso schreibst du immer zentriert ich finde das extrem anstrengend zu lesen :frowning:

Das beste wäre wenn du ganz simpel beginnst

   public static void main(String[] args) throws IOException
  {
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);
    System.out.print("Gib was ein: ");
    String eingabe = br.readLine();
    System.out.println("Du hast " + eingabe + " eingegeben.");
  }```


Edit: Hier http://www.javabeginners.de/Ein-_und_Ausgabe/Scanner.php ist auch ein gutes Beispiel, inkl einer while Schleife, die solange läuft bis man q drückt.

Ich danke Dir, für Deine Antwort, und schreibe natürlich auch gerne Linksbündig, falls das lieber gesehen wird. :smiley:

Leider kann ich mit Deiner Antwort immer noch nicht viel anfangen. Kannst Du mir ein Beispiel geben, wie ich es besser machen könnte?

Siehe mein Post oben für ein Beispiel.

Hallo MiMi,

ich schreibe recht langsam, daher habe ich weder Deinen noch bygones Post gesehen bevor ich auf Antworten gedrückt habe :o.

Hallo nochmal :).

Ich hoffe ich nerve nicht zu sehr :D.

Ich habe jetzt noch mal ein wenig, getreu dem Beispiel weitergemacht und im Prinzip funktioniert jetzt alles. Nur in der Realität noch nicht…:frowning:

Ich habe wieder versucht die Do-While Schleife reinzubasteln. Doch jetzt gibt mir das Programm nur noch die gleiche (antwort(eingabe)); in unendlicher weise aus. Wahrscheinlich fehlt da nur eine Zeile Code, bloß welche :o.


public class Minion_Main {
    
    public static void main(String[] args) throws IOException{
    
    //Begruessung
    System.out.println("Hallo.");
    
    //Initialisierung
    boolean beenden=false;
    InputStreamReader input = new InputStreamReader(System.in);
    BufferedReader aktuell = new BufferedReader(input);
    String eingabe = aktuell.readLine();
    
    //System.out.println(antwort(eingabe));
    
    while (!beenden){
            if (!eingabe.contains("keks"))
        System.out.println(antwort(eingabe));
        else {                                       
        System.out.println("Auf wiedersehen.");
        beenden=true;
                 }
                        }
    
    
    }   
       
    private static String antwort(String eingabe){
            
       String antwort = ("aha " + eingabe);
        
       return antwort;
    }
    
}

Du musst mal anfangen an sowas systematisch dran zu gehen. Simple Gegenfrage: “Warum sollte sie das nicht tun?”

[QUOTE=BeBunny]Doch jetzt gibt mir das Programm nur noch die gleiche (antwort(eingabe)); in unendlicher weise aus. Wahrscheinlich fehlt da nur eine Zeile Code, bloß welche :o.[/QUOTE]Verdammt dicht dran. Hier mal dein Code “aufgeräumt”. Evtl kommst du selbst drauf, warum sich eingabe nicht ändert ;)```
public class Minion_Main {

public static void main(String[] args) throws IOException{

// ...
String eingabe = aktuell.readLine();
    
while (!beenden){
        if (!eingabe.contains("keks")){ ... }
 }

EDIT: wenn du deinen code in [java ] ``` einbettest (statt in [code ] 

), dann kann man ihn auch hier im Forum super lesen.

Schau dir mal den Link an den ich gepostet hab, dort ist auch ein Beispiel mit einer while-Schleife.

Java-Code kannst du mit Java-Tags hier einfügen dann hat man auch Syntax-Highlighting. Du solltest auch auf richtige Formatierung und auf die Klammern achten, sonst kann das ganze ganz schnell schief gehen.


while (!beenden){ // solange wie ...?
    if (!eingabe.contains("keks")) {// ... ?
        System.out.println(antwort(eingabe)); // ... ?
    } else {                                       
        System.out.println("Auf wiedersehen.");  // ..?
        beenden=true; // ... ?
    }
}

und überall wo jetzt …? steht, überleg dir was passiert

Edit: Ich weiss immer das gleiche aber du solltest dich ein wenig mit den Grundlagen beschäftigen, Objekte, Variablenzuweisungen, Schleifen, Bedingungen

Ich gebe Dir recht MiMi, ich muss die ganzen Dinge lernen. Daher mache ich das ja. Allerdings stehe ich noch ziemlich am Anfang :). Vieles habe ich mir zwar schon mal angelesen und verstehe es, aber es allein richtig anwenden ist dann eben doch noch ein anderes paar Schuhe…

Ich danke Euch allen für Eure tolle Hilfe. Vielleicht kann ich selbige noch ein wenig in Anspruch nehmen: Was ist an diesem Versuch noch verbesserungswürdig.


import java.io.IOException;
import java.util.Scanner; 


/**
 *
 * @author kanexo
 */
public class Minion_Main {
    
    public static void main(String[] args) throws IOException{
    
    //Begruessung
    System.out.println("Hallo.");
    
    //Initialisierung
    
   Scanner scanner = new Scanner(System.in); 
    
    
    //System.out.println(antwort(eingabe));
    
        while (true){
                String eingabe = scanner.next().toLowerCase(); 
                if (eingabe.contains("keks")) break;
                    System.out.println(antwort(eingabe));
                 }
        System.out.println("Bye...");
        scanner.close();     
                
                
                
        }
      
       
    private static String antwort(String eingabe){
            
       String antwort = ("aha " + eingabe);
        
       return antwort;
    }
    
}

while(true) ersetzen.
break raus

Die Lösungen sind einfach, kurz drüber nachdenken wie man z.B. statt break die if Abfrage ändern kann.

Wahrscheinlich Geschmackssache, aber schöner fänd ich:

...
String eingabe =scanner.read() ;
while (!eingabe.contains("keks") {
//... wie vorher, nur ohne if.
}

Gruß

Edit: timbeau überlesen::ugly

Das ganze ist ein sehr Prozeduraler Code. Ein Feature von Java ist, daß es eine Objektorientierte Sprache ist.
Das bietet einem dann im weiteren ganz viele Möglichkeiten.

import java.io.IOException;
import java.util.Scanner; 

public class Minion {

  private Scanner scanner = new Scanner(System.in);

  private boolean isRunning = true;

  public void run() {
    try {
      while(isRunning){
        String question = readQuestion();
        String answer = answer(question);
        print(answer);
      }
    } catch (Exception e){
      System.out.println("Probleme beim lesen");
    } finally {
      endProgram();
    }
  }
    
  private String readQuestion() throws Exception{
    return scanner.next().toLowerCase();
  }

  private String answer(String eingabe){
    if(eingabe.contains("keks")){
      isRunning = false;
      return "Bye";
    } else {
      return "aha "+eingabe;
    }
  }

  private void print(String text){
    System.out.println(text);
  }

  /*
   * Aufräumarbeiten
   */
  private void endProgram() throws Exception{
    try {
      scanner.close();
    } catch (Exception e) {
      System.out.println("Manchmal läuft aber auch alles schief!");
    }
  }

  public static void main(String[] args) throws Exception{
        
    //Initialisierung
    Minion program = new Minion();
    program.run();
  }
}

Da ist jetzt auch ein rudimentäres Exception-Handling dabei.

OOP :smiley:
Und warum ist z.B. print() nicht statisch? Ah, da koennte man ja gleich einen static import verwenden.
Manchmal muss mal halt erst programmieren lernen, bevor man nach vielen Jahren mit OOP die Früchte davon sieht.