PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Java



Kaho
10.04.2012, 22:52
hey hab folgendes relativ einfaches problem

und zwar hab ich aneinader gereihte zahlen
(sowas wie 20-5-6-7)
der "-" dient als trennzeichen zwischen den zahlen.

das ganze wird einfach in nen string eingelesen (via bufferedReader)

die frage für mich ist:
wie kann ich den großen string in mehrer kleinere verwandlen?
sprich das mit die 20 in die variable a und die 5 in die variable b usw. gespeichert wird?

ich selbst bin relativ neu in java, daher kenn ich dafür keine passenden befehle, habe bisher weder mit arrays noch richtig mit schleifen gearbeitet, daher hab ich hier kA wie man das machen soll.

wenn jmd. was weiß, dann bitte her mit dem wissen :-)

Bonkers
10.04.2012, 23:04
http://www.rgagnon.com/javadetails/java-0438.html

Kaho
11.04.2012, 01:53
so ein weiteres problem...


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

public class Raetsel
{
public static void main(String argv[]) throws Exception
{
String str;
int[] b = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
int i=1;
String[] c = {" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "};
String[] a = {" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "};


BufferedReader input=new BufferedReader(new InputStreamReader(System.in));

String[] alphabet = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};

System.out.print("Texteingabe: ");
str = input.readLine();
str = "--20--8--5--26--19--3--5--14--5--";


java.util.Arrays.toString(a=str.split("--"));

while (a[i]!=" ")
{
if (a[i]!="--")
{
b[i]=Integer.parseInt(a[i])-1;
c[i]= alphabet[b[i]];
System.out.println(c[i]);
}
else
{
break;
}
i++;
}

System.out.println();
System.out.println("Programmende Raetsel");
}
}
was soll das programm machen:

man macht eine tastatureigabe (so wie die, die im str gespeichert wird)
und das programm wandelt die zahlen in buchstaben um.

das array von string c und c musste ich definieren sonst meckert mir der compiler rum, array von string a hab ich definiert, um die while-schleife abbrechen zu können.

leider hab ich keine ahnung von schleifen, jedoch arbeitet das programm ganz normal, nur am ende kommt immer ein:
ArrayIndexOutOfBound

langsam blick ich da einfach nicht mehr durch...
außerdem ist es viel zu spät..

wenn jmd versteht was ich meine und zeit/lust hat, dann kann er mal drübergucken...

sp1nny
11.04.2012, 05:28
Ohne mir das Programm jetzt genauer angeguckt zu haben, aber eine ArrayIndexOutOfBound - Exception tritt immer dann auf, wenn du versuchst auf ein Element eines Arrays zuzugreifen, dass nicht existiert.

Der Fehler liegt hier ->


while (a[i]!=" "){
//blub
i++;
}richtig wäre:


while (i < Array.getLength(a)){
if (a[i]!="--"){
b[i]=Integer.parseInt(a[i])-1;
c[i]= alphabet[b[i]];
System.out.println(c[i]);
}else{
break;
}
i++;
}mfg

Kaho
11.04.2012, 12:42
hmm da sagt er mir jetzt, dass er Array nicht kennen würde...

kenne den befehl nicht, daher weiß ich nicht, ob ich vllt noch mehr librarys reinpacken muss


import java.io.*;
import java.util.*;die sind bis jetzt drin

edit: @ sp1nny (http://free-hack.com/member.php?u=53871) so hatte ich das mit dem fehler auch verstanden.
ich dachte das mein array a zu klein wäre, da er in a ja den string getrennt reinschreibt und dann unten die einzelnen teile durchgeht.
I wird immer weiter erhöht und somit checkt er auch einen teil vom array, der vllt nicht existiert, daher hab ich ja das array a oben so griß gemacht (mit leerzeichen)
und hab als bediengung für die while schleife gesagt, er soll aufhören, wenn ein leerzeichen im array steht, nur leider wills nicht so, wie ich das will :-)

edit2: ok habs für java heißt der befelht dann "a.length" sprich: name_des_arrays.length

aber danke für den tipp, fehler kommt nicht mehr...





nächstes problem, jetzt waren ja nur zahlen im array, wenn ich jetzt noch sage, dass im array noch ein symbol auftacht, was ein leerzeichen sein soll, wie kann ich das abfangen?
ich editier gleich mal meinen ansatz

edit3:


while (i < a.length)
{
if (a[i] == "/")
{
System.out.print(" ");
}

else if (a[i]!="--")
{
b[i]=Integer.parseInt(a[i])-1;
c[i]= alphabet[b[i]];
System.out.print(c[i]);
}

else
{
break;
}
i++;
}das ist mein ansatz.
leider kommt, wenn ich jedoch ein "/" reinbauen will kommt folgender fehler:

http://www0.xup.in/exec/ximg.php?fid=12348679

vllt kann mir ja jmd da weiterfelhen, ich tüftel selbst mal ein wenig rum

edit 4:
ok habs...

if (a[i].equals("/"))

muss ich nehmen, dann gehts auch ;-)

---------- Post added at 13:42 ---------- Previous post was at 12:51 ----------

neuer post da es sonst unübersichtlich wird:


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

public class Raetsel
{
public static void main(String argv[]) throws Exception
{
String str;
int[] b = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
int i=1;
String[] c = {" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "};
String[] a = {" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "};


BufferedReader input=new BufferedReader(new InputStreamReader(System.in));

String[] alphabet = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};

System.out.print("Texteingabe: ");
str = input.readLine();

java.util.Arrays.toString(a=str.split("--"));


while (i < a.length)
{
if (a[i].equals("//"))
{
System.out.print("");
}
else if (a[i].equals("/"))
{
System.out.print(" ");
}
else if (a[i]!="--" && (a[i] != "/"))
{
b[i]=Integer.parseInt(a[i])-1;
c[i]= alphabet[b[i]];
System.out.print(c[i]);
}
else
{
break;
}
i++;
}

System.out.println();
System.out.print("Programmende Raetsel");
}
}

zum üben :-)

das einzigste was mich noch stört, ist dass ich a,b und c schon vorher füllen muss...

sn0w
11.04.2012, 12:52
Tu dir und allen anderen auch einen Gefallen und schau dir bitte vorher die Sprache an. Dass du das String Array vorher füllen musst, ist natürlich Schwachsinn, wenn du das Array richtig initialisierst...

Bonkers
11.04.2012, 15:30
Dass du das String Array vorher füllen musst, ist natürlich Schwachsinn, wenn du das Array richtig initialisierst...

http://www.programmersbase.net/Content/Java/Content/Tutorial/Java/Array.htm

Kaho
11.04.2012, 19:45
wie gesagt bin ich noch blutiger anfänger und habe bisher noch nie mit arrays gearbeitet.


int[] array1 = new int[10]; was mach ich den, wenn ich vorher noch nicht weiß, wie groß das array später werden wird?

edit: ok das mit dem initialisieren hab ich hinbekommen, aber die frage von oben bleibt

sn0w
11.04.2012, 19:57
http://stackoverflow.com/questions/1647260/java-dynamic-array-sizes

Kaho
11.04.2012, 21:07
ok so wie ich das verstehe muss ich ne größe angeben...

ich könnte maximal ein neues array ins programm einbeziehen, welches dann größer wäre als mein altes, welches das alte aufnimmt und dann ja noch platz übrig hat...

naja ich machs einfach etwas größer und bin fertig mit der sache...
ist ja eh nur spielerei, aber danke für den link

sp1nny
12.04.2012, 16:52
Benutze am besten ArrayList statt array, das ist eine vergrößerbare Arrayimplementation des List Interfaces. Es gibt eigentlich kein Grund warum man eine ArrayList einem normalen array nicht vorziehen sollte.

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/List.html

Falls du nicht weißt was ein Interface ist:

Ein Interface ist imprinzip eine abstrake Klasse die auch nur abstrakte und keine konkreten Methoden enthält. Wenn man ein Interface in eine Klasse einbezieht sagt man dem Compiler damit, dass die in dem Interface definierten Methoden auch von der Klasse implementiert sind.



mfg