Hangman Array Problem

  • Antworten:8
Ahmet Yilmaz
  • Forum-Beiträge: 6

09.08.2012, 20:33:46 via Website

Hallo!
Ich bin ein Anfänger in Sachen Java und da ich die Sprache eh später im Studium lerne, wollte ich einfach mal etwas ausprobieren. Also, vor 2 Jahren, haben wir in der Schule als Projekt Hangman programmiert, allerdings in Delphi. Dort gab es ja die schönen Arrays. Allerdings komme ich mit genau denen bei Java nicht klar. Man konnte bei Delphi, bei einem String einfach mit [i]String auf die i'te Stelle im String zugreifen und dann auch verändern. Bei Java verstehe ich das nicht ganz. Mit der Method: charAt(i) gehts nicht, kann also nicht die Stelle verändern. Desweiteren, denke ich, dass der Fehler irgendwo bei meinem String Array liegt. Denn als Fehler bei logcat bekomme ich: java.lang.ArrayIndexOutOfBoundsException.
Ich hoffe ihr könnt mir irgendwie helfen, die App stürzt immer bei der Abfrage ab. Hier mal der Quellcode:
[code]
package hello.android.com;

import android.app.Activity;
import android.os.Bundle;

import java.lang.reflect.Array;
import java.math.*;

import android.view.View;
import android.widget.Button;
import android.widget.TextView;;

public class HelloAndroidActivity extends Activity {
/** Called when the activity is first created. */
private CharSequence x = "";
private CharSequence y="";
private String losung;
private int n= 10;
String wort[];
private int treffer;
private int versuche;
Button eingabe, abfrage;
TextView editText1, editText2, anzeige, treffer_anzeige;


public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.main);
eingabe = (Button) findViewById(R.id.button1);
editText1 = (TextView) findViewById(R.id.editText1);
abfrage = (Button) findViewById(R.id.button2);
editText2 = (TextView) findViewById(R.id.editText2);
anzeige = (TextView) findViewById(R.id.textView1);
TextView treffer_anzeige = (TextView) findViewById(R.id.textView2);
eingabe.setOnClickListener(buttonclick);
abfrage.setOnClickListener(buttonclick);}


View.OnClickListener buttonclick= new View.OnClickListener() {
public void onClick(View v) {
if (v == eingabe){
x= editText1.getText();

editText1.setVisibility(View.GONE);
eingabe.setVisibility(View.GONE);
abfrage.setVisibility(View.VISIBLE);
editText2.setVisibility(View.VISIBLE);
anzeige.setVisibility(View.VISIBLE);
n=x.length();
String wort[]= new String[n];
for(int i=0; i<n; i++){
wort[i]="_ ";
}
anzeige.setText(String.valueOf(wort));

}
else{
y= editText2.getText();
for(int i =0; i<n; i++){
if (y.charAt(0)== x.charAt(i)){
wort[i*2-1]=String.valueOf(y);
anzeige.setText(String.valueOf(wort));
treffer= treffer+1;
}
}
if (treffer==0){
versuche= versuche-1;
treffer_anzeige.setText("Der Buchstabe "+y+" ist nicht im Wort enthalten");
}
else{
treffer_anzeige.setText("Der Buchstabe " +y+" ist "+ treffer+" mal enthalten");}
}
}
};





}[/code]

Antworten
André
  • Forum-Beiträge: 77

10.08.2012, 10:17:50 via Website

Ahmet Yilmaz
Denn als Fehler bei logcat bekomme ich: java.lang.ArrayIndexOutOfBoundsException.

Das Logcat sagt dir mehr als die Exception: es sagt dir auch genau, wo sie auftritt (also die Zeilennummer). Da ist es dann immer eine gute Idee, sich die Zeile mal anzuschauen und zu überlegen, warum es zu dieser Exception kommt.

Ahmet Yilmaz

Antworten
Ahmet Yilmaz
  • Forum-Beiträge: 6

10.08.2012, 12:27:42 via App

André
Ahmet Yilmaz
Denn als Fehler bei logcat bekomme ich: java.lang.ArrayIndexOutOfBoundsException.

Das Logcat sagt dir mehr als die Exception: es sagt dir auch genau, wo sie auftritt (also die Zeilennummer). Da ist es dann immer eine gute Idee, sich die Zeile mal anzuschauen und zu überlegen, warum es zu dieser Exception kommt.

Und wo genauwo kann ich die Zeilennummer bei eclipse finden? Also jetzt bei logcat.

Antworten
André
  • Forum-Beiträge: 77

10.08.2012, 12:30:16 via Website

Die Frage verstehe ich nicht. Das Logcat besteht quasi nur aus Zeilennummern. Hier ein Beispiel aus einem anderen Thread:

08-09 09:28:10.129: W/System.err(338): java.io.EOFException
08-09 09:28:10.129: W/System.err(338): at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:415)
08-09 09:28:10.138: W/System.err(338): at java.io.DataInputStream.readUTF(DataInputStream.java:433)
08-09 09:28:10.138: W/System.err(338): at com.example.sockettest.MainActivity$1.onTick(MainActivity.java:78)

Ahmet Yilmaz

Antworten
Ahmet Yilmaz
  • Forum-Beiträge: 6

10.08.2012, 13:25:22 via Website

André
Die Frage verstehe ich nicht. Das Logcat besteht quasi nur aus Zeilennummern. Hier ein Beispiel aus einem anderen Thread:

08-09 09:28:10.129: W/System.err(338): java.io.EOFException
08-09 09:28:10.129: W/System.err(338): at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:415)
08-09 09:28:10.138: W/System.err(338): at java.io.DataInputStream.readUTF(DataInputStream.java:433)
08-09 09:28:10.138: W/System.err(338): at com.example.sockettest.MainActivity$1.onTick(MainActivity.java:78)

Also ich hab das logcat fenster in Eclipse. Jedoch sind die einzige Zahlen die da sind, mit PID bezeichnet, oder sind außerhalb der Zeilenanzahl, die mein Quellcode hat. Ich krieg die Logcat datei auch nicht gespeichert mit: adb logcat > logcat.txt, bekomme immer die Fehlermedlung, dass der Zugriff verweigert wurde. Ich denke aber, dass das Problem bei meinem String [] liegt. Ich will beim ersten Button Click, ein String [] erzeugen, was der zweite Button auch sehen kann, und das geht iwie bei mir nicht. Ich kann die Variable auch nicht mit private deklarieren, weil ich ja noch nicht weiß, wie lang das Wort in der Eingabe ist. Kann mir da zufällig jemand helfen?

Antworten
Ahmet Yilmaz
  • Forum-Beiträge: 6

10.08.2012, 13:49:28 via Website

Entschuldigung für den Doppelpost, aber ich hab das jetzt gelöst bekommen. Hab das Array jetzt von Anfangan auf eine größe von 20 gebracht und jetzt scheint es auch zu funktionieren.
Nur das nächste Problem:
Ich will ja eine Anzeige haben die in etwa so aussieht:"_ _ _ _ _ "
Dabei besteht jede Stelle im Array aus "_ ". Bei dem Versuch, das mit nem Label auszugeben, bekomme ich folgenden fehler, bzw das steht da im Array:
"Ljava.lang.String;@40517758"
Weiß jemand was das bedeutet? Kann ich evtl einfach den kompletten Inhalt von dem Array auf eine andere variable kopieren?

Antworten
Markus B.
  • Forum-Beiträge: 636

10.08.2012, 13:58:10 via Website

Hi Ahmet,
da fehlen einfach die grundlegendsten Java-Kenntnisse und damit wirst du auf Dauer sicher nicht glücklich. Somit empfehle ich dir einen Gang zurückschalten und bei den Java-Basics anzufangen.
Dazu empfehle ich dir folgende Seite http://openbook.galileocomputing.de/javainsel/. Da werden Teile des ersten und das zweite Kapitel interessant.
Das solltest du meiner Meinung nach machen. Dein aktuelles "Problem" wird dort auch erläutert: http://openbook.galileocomputing.de/javainsel/javainsel_05_011.html#dodtp9a1e87d1-88eb-4365-b816-4c4b05a08384

Gruß,
Markus

— geändert am 10.08.2012, 13:58:28

Ahmet Yilmaz

Antworten
Ahmet Yilmaz
  • Forum-Beiträge: 6

10.08.2012, 14:48:24 via Website

Markus B.
Hi Ahmet,
da fehlen einfach die grundlegendsten Java-Kenntnisse und damit wirst du auf Dauer sicher nicht glücklich. Somit empfehle ich dir einen Gang zurückschalten und bei den Java-Basics anzufangen.
Dazu empfehle ich dir folgende Seite http://openbook.galileocomputing.de/javainsel/. Da werden Teile des ersten und das zweite Kapitel interessant.
Das solltest du meiner Meinung nach machen. Dein aktuelles "Problem" wird dort auch erläutert: http://openbook.galileocomputing.de/javainsel/javainsel_05_011.html#dodtp9a1e87d1-88eb-4365-b816-4c4b05a08384

Gruß,
Markus
Hey, vielen Dank für die Antwort, ich weiß, ich bin noch ein Anfänger, aber jeder muss ja mal klein Anfangen.
Hab das mit dem Fehler jetzt behoben, nur bekomme ich als Ausgabe das hier: ["_ ", "_ ", "_ ", null, null....]
Das mit den null weiße ich schon, das Array ist ja 20 lang und da ich ja nicht auf alles etwas belegt habe, kommt das. Nur mein Problem ist jetzt, kann ich das irgendwie ausgeben, ohne die eckigen Klammern zu haben?

Antworten
Ahmet Yilmaz
  • Forum-Beiträge: 6

10.08.2012, 15:09:42 via Website

Tja so schnell gehts doch :)
Habs jetzt etwas anders hinbekommen. Vielen Dank an alle für eure Hilfe :)

Antworten