hagman

Status
Nicht offen für weitere Antworten.

nata

Bekanntes Mitglied
Hi leute,
die aufgabestellung ist folgende Schreibe ein Programm, bei dem zuerst ein geheimes Wort ausgewählt wird. Erstelle dazu ein (konstantes) Array mit 20 verschiedenen Wörtern, die jeweils mindestens 4 Buchstaben haben. Um das Programm anfangs einfach zu halten sind alle gesuchten Wörter in Kleinbuchstaben geschrieben und der Benutzer darf nur Kleinbuchstaben eingeben. Wähle dann zufällig ein Wort aus diesem Array.
Jetzt beginnt das Spiel. Frage den Benutzer nach einem Buchstaben. Ist der Buchstabe in dem gesuchten Wort enthalten, dann zeige den Buchstaben an allen Stellen an, wo er im Wort enthalten ist. Dieser Vorgang wird so oft wiederholt, bis der Benutzer entweder das Wort erraten hat, oder die Rateversuche verbraucht sind.


und meine gedanken was mir eingefallen hat ist folgende, aber weiss ich nicht ob ich aufgabestellug richtig verstanden habe
Java:
import java.util.*;

public class Hagman {
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		Random r =new Random();
		
		String [] stringArray = new String[19];
		
		// muss ich manuell die wörter dazugeben? z.b stringArray[1] = java ...
		//ich könte auch überprüfung reinbauen dass die länge der eingegebene
		// wörter nicht kleiner als 4 sein dürfen
		//dann würde ich aus der array mit der random ein zufälliges wort aussuchen
		//und mit scanner buchstaben eingeben und dieses wort auch in der for schleife 
		//durchlaufen
		
	}
	
}
 

nata

Bekanntes Mitglied
ist die vorgehensweise richtig wie ich es mache oder ist zu kompliziert ?
in der 26. zeile mache ich fehler, sollte ich noch eine for scleife einbauen welche array durchlauft ?

in der 36.zeile ist auch fehler, weil ich jede char mit eine ratebuchstabe der String ist vergleiche.Mit scanner kamm man nicht zeichen definieren. wie soll ich das machen?
Java:
import java.util.*;

public class Hagman {
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		Random r =new Random();
		
		String [] stringArray = new String[20];
		
		for(int i = 0; i < stringArray.length; i++){
			String wort = sc.next();
			if(wort.length() < 4){
				System.out.println("Das wort ist zu kurz");
			}else{
				stringArray[i] =  sc.next();
			}
		}
			
			int n = r.nextInt(stringArray.length +1);
			String rateWort = stringArray [n];
			String[] rateWortArray = new String[rateWort.length()];
			
			for(int i = 0; i < rateWort.length() ; i ++){
				char c =  rateWort.charAt(i);
				
				rateWortArray[i] = c;
			}
			
			Scanner rateBuchstabe = new Scanner(System.in);
			
			for(int i = 0; i < rateWort.length() ; i++){
				System.out.println("Bitte geben Sie eine Buchstabe :  ");
				String s =  rateBuchstabe.next();
				for(int j = 0 ; j < rateWort.length(); j ++){
					char c = rateWort.charAt(i);
					if(c == s){
						
					}
				}
			}
		
	}
	
}
 

ARadauer

Top Contributor
Ja so ungefähr passt das schon. Wird schon...
zu deinen Fehlern:
26 du weist einem String einen char zu...
rateWortArray = Character.toString(c);

in Zeile 36 kannst du das auch machen, Strings vergleicht man aber mit equals...
if(Character.toString(c).equals(c)){

Zeile 21 bis 27. da könntest du alternativ das machen..
char[] rateWortArray = rateWort.toCharArray();
musst aber aufpassen, denn dann hast du ein char[] und kein String[]
 

nata

Bekanntes Mitglied
hi leute nochmal,
auf der 33.zeile String s = rateBuchstabe.next(); bedeutet doch dass es mehrmals buchstaben gegeben wird?

ich wollte rateversuch solange haben bis lenge -1 und auch 42.zeile stimmt irgendwie nicht
Java:
import java.util.*;

public class Hagman {
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		Random r =new Random();
		
		String [] stringArray = new String[20];
		
		for(int i = 0; i < stringArray.length; i++){
			String wort = sc.next();
			if(wort.length() < 4){
				System.out.println("Das wort ist zu kurz");
			}else{
				stringArray[i] =  sc.next();
			}
		}
			
			int n = r.nextInt(stringArray.length +1);
			String rateWort = stringArray [n];
			String[] rateWortArray = new String[rateWort.length()];
			
			for(int i = 0; i < rateWort.length() ; i ++){
				char c =  rateWort.charAt(i);
				
				rateWortArray[i] = Character.toString(c);
			}
			
			Scanner rateBuchstabe = new Scanner(System.in);
			do{
			for(int i = 0; i < rateWort.length() ; i++){
				System.out.println("Bitte geben Sie eine Buchstabe :  ");
				String s =  rateBuchstabe.next();
				char c = rateWort.charAt(i);
				if(Character.toString(c).equals(s)){
					rateWortArray[i]=s;
					
					System.out.println("Sie haben:  " + rateWort.length()-1-i + "versuche");
				}
				
			}
			}while(rateWort.length()-1-1 == 0)
		
	}
	
}
 

eRaaaa

Top Contributor
hi leute nochmal,
auf der 33.zeile String s = rateBuchstabe.next(); bedeutet doch dass es mehrmals buchstaben gegeben wird?
wenn der benutzer welche eingibt dann ja :lol:

ich wollte rateversuch solange haben bis lenge -1 und auch 42.zeile stimmt irgendwie nicht

nur mal schnell überblickt:

zu deiner zeile 42: r}while(rateWort.length()-1-1 == 0)
da fehlt am eine ein semikolon --> ;
aber was soll -1-1 ???:L

zeile 38: wie schon im anderne thread von dir gesagt:
System.out.println("Sie haben: " + (rateWort.length()-1-i) + "versuche");
 

nata

Bekanntes Mitglied
zu zeile 38. du hast recht gehabt. es liefert dort keinen fehler mehr aber was ist der uterschied, ohne und mit klammer?

@ while(rateWort.length()-1-i == 0); damit will ich zeigen dass die eingabe bis dann fuktionieren soll bis rateWort.length()-1-i == 0

z.b zum beispiel wort hat die laenge 9 und ich will dass es bis 8 versuche gibt
8 =(rateWort.length()-i ) aber ich will doch irgendwan abbrechen.
ich weiß dass i nach for schleife nichtmehr gibt. was sollte ich stattdessen machen?
 

ARadauer

Top Contributor
}while(rateWort.length()-1-1 == 0)
ich denke rateWort wird nie kürzer...

Ich würde die möglichen fehlerhaften Versuche als fixen wert angeben. Ist ja beim hangman so, kA 7 mal falsch und das Mänchen hängt...
fehlerhafte Versuche mitzählen
while(fehlerhafteVersuche < möglicheFehlerhafteVersuche){
//weiterspielen...
}
 

eRaaaa

Top Contributor
:D keine ahnung, ich wollte eig. nur anmerken dass du nicht -1-i, sondern -1-1 (-eins -eins) geschrieben hast in deinem code.

also ich hab dne thread hier nicht von anfang an verfolgt, aber sollst du nicht selber 20 wörter ausdenken, diese in ein array packen ?
dann zufällig eins auswählen, welches dann das wort ist nach welchem der user suchen soll?
dann muss der user halt immer buchstaben eingeben und du musst schauen ob diese im wort enthalten sind.
bei der while schleife, mhm, im moment schwer zu sagen wie man das machen kann, gibt verschiedene möglichkeiten (ist noch früh am morgen ;D ). vllt einfach zusätzlich noch ein array merken(userRateArray), dass so groß ist wie dein rateWort array, und immer wenn der user einen buchstaben richtig geraten hat, schreibste diesne an die richtige stelle im userRateArray oder whatever :D
dann könntest du deine schleife solange laufen lassen, bis Arrays.equals(userRateArray, rateWort);
 

ARadauer

Top Contributor
gehst du davon aus, dass der Spieler immer den aktuellen Buchstaben wissen muss?
Der Buchstabe kann an irgend einer stelle sein dass er als richtig erkannt wird..

Poste nochmal deinen gesamten Code...
 

nata

Bekanntes Mitglied
das ist meine code

Java:
import java.util.*;

public class Hagman {
	public static void main(String args[]){
		Scanner sc = new Scanner(System.in);
		Random r =new Random();
		
		// array mit laenge 20 erstellen 
		String [] stringArray = new String[20];
		
		//durchlaufen diese Array und die woerter eingeben und dabei falls das wort 
		// die laenge weniger als 4 hat,fehler melden und wenn es kein fehler gibt 
		//in array einfuegen
		for(int i = 0; i < stringArray.length; i++){
			String wort = sc.next();
			if(wort.length() < 4){
				System.out.println("Das wort ist zu kurz");
			}else{
				stringArray[i] =  sc.next();
			}
		}
		
			
			// zufaellige zahl zwischen 1 und 20
			int n = r.nextInt(stringArray.length +1);
			
			// und string weisen wir wort welche an der Stelle der  zufällige zahl ist 
			String rateWort = stringArray [n];
			
			// erstellen wir eine andere Array die läge von ratewort hat
			String[] rateWortArray = new String[rateWort.length()];
			
			
			Scanner rateBuchstabe = new Scanner(System.in);
			
			for(int i = 0; i < rateWort.length() ; i++){
				System.out.println("Bitte geben Sie eine Buchstabe :  ");
				String s =  rateBuchstabe.next();
				char c = rateWort.charAt(i);
				if(Character.toString(c).equals(s)){
					rateWortArray[i]=s;
					
					System.out.println("Sie haben:  " + ( rateWort.length()-1-i )+ "versuche");
				}
				
			}
		}	
}
 

faetzminator

Gesperrter Benutzer
[unnötiges Geschwafel]
Wie bereits darauf hingewiesen heisst es Hangman und nicht Hagman.
hag = Hexe, man = Mann --> Hexenmann? :bahnhof:
hangman = Henker! :applaus:
[/unnötiges Geschwafel]
 

ARadauer

Top Contributor
du hast meiner Meinung nach schon viel Eigeniniative gezeigt..
schau dir das mal an:

Java:
import java.util.Random;
import java.util.Scanner;

public class Hagman {
   public static void main(String args[]){
      
       Random r =new Random();
       
       // array mit laenge 20 erstellen 
       
       //Ich denke die sind schon vorgegeben...
       String [] stringArray = {"bier", "wein", "schnaps"}; //usw...
       
       int versuche = 0;
       int maxVersuche = 10;
       
       //durchlaufen diese Array und die woerter eingeben und dabei falls das wort 
       // die laenge weniger als 4 hat,fehler melden und wenn es kein fehler gibt 
       //in array einfuegen
//       for(int i = 0; i < stringArray.length; i++){
//           String wort = sc.next();
//           if(wort.length() < 4){
//               System.out.println("Das wort ist zu kurz");
//           }else{
//               stringArray[i] =  sc.next();
//           }
//       }
//       
           
           // zufaellige zahl zwischen 1 und 20
           int n = r.nextInt(stringArray.length +1); //sehr brav!!
           
           // und string weisen wir wort welche an der Stelle der  zufällige zahl ist 
           String rateWort = stringArray [n];
           
           // erstellen wir eine andere Array die läge von ratewort hat
           //String[] rateWortArray = new String[rateWort.length()]; //mhn nein...
           StringBuffer loesung = new StringBuffer(); //das geben wir dem Benutzer aus
           for(int i = 0; i < rateWort.length(); i++){
              loesung.append("_");
           }
           
           
           Scanner rateBuchstabe = new Scanner(System.in);
           
           while(!loesung.toString().equalsIgnoreCase(rateWort) && versuche< maxVersuche){ //so lange wir das wort nicht eraten haben und wir noch raten dürfen...
              System.out.println("Dein Wort: "+loesung+" Versuche:"+versuche+"/"+maxVersuche);
              System.out.println("Bitte geben Sie eine Buchstabe :  ");
              
              String s =  rateBuchstabe.next();          
           
              boolean found = false;
              
              for(int i = 0; i < rateWort.length() ; i++){ //das rateWort durchgehen               
                  char c = rateWort.charAt(i);
                  if(Character.toString(c).equals(s)){ //ist der aktuelle Buchstabe der den wir eingegeben haben?
                     found = true; // gefunden
                     loesung.setCharAt(i, c); //in Lösung eintragen
                  }
                  
              }
              if(!found){
                 versuche++;
                 System.out.println(s+" war nicht entahlten");
                
              }else{
                 System.out.println("super " +s+" war entahlten");
              }
           }
           
           if(loesung.toString().equalsIgnoreCase(rateWort)){
              System.out.println("Gewonnen");
           }else{
              System.out.println("Looooooser");
           }
       }   
}
 
Status
Nicht offen für weitere Antworten.

Oben