Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

Nadja

Trainee

  • "Nadja" is female
  • "Nadja" started this thread

Posts: 74

Date of registration: Apr 11th 2006

1

Tuesday, May 16th 2006, 8:58pm

java Übung 6

Hallo ,
ich versuche eigentlich ein Programm zu schreiben aber ich bekomme immer mit dem Ergebnis folgende Fehlermeldung:

Ich gebe das Wort STUDIUM ein
Ich bekomme :
s
t
u
d
i
u
m

Exception in thread "main" java.lang.StringIndexOutOfBoundsExeption:String index out of range: 7
at java.lang.String.charAt<Unkonwn Source>


import java.lang.*;
import java.util.*;

class hallo
{
public static void main(String args[])
{

String b=args[0];
char c,l,k;


for (int i=0 ; i<=b.length() ; i++)
{
c=b.charAt(i);

if(Character.isLetter(c))
{
if(Character.isLowerCase(c))
{
l=c;

System.out.println(l);
}
else if(Character.isUpperCase(c))
{
k=Character.toLowerCase(c);
System.out.println(k);
}

}

}




}
}


Was ist falsch an dem Programm???

lg
nadja

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

2

Tuesday, May 16th 2006, 9:06pm

RE: java Übung 6

Quoted

Original von Nadja
ich versuche eigentlich ein Programm zu schreiben aber ich bekomme immer mit dem Ergebnis folgende Fehlermeldung:

Exception in thread "main" java.lang.StringIndexOutOfBoundsExeption:String index out of range: 7
at java.lang.String.charAt<Unkonwn Source>
Schau Dir mal die Dokumentation zu dieser Exception an: http://java.sun.com/j2se/1.5.0/docs/api/…sException.html. Dort steht Dein Fehler sogar explizit als Beispiel drin. :)

Achso: Für Quelltext kannst Du hier im Forum spezielle CODE-Tags verwenden, damit dieser lesbar bleibt. Das sieht dann so aus:

Source code

1
test
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

Jethro

Junior Schreiberling

  • "Jethro" is male

Posts: 185

Date of registration: Oct 15th 2002

3

Tuesday, May 16th 2006, 9:12pm

Hi,
deine If-Schleife läuft von 0 bis Länge des übergebenen Argumentes, das ist einmal zuviel. Du musst es also zu b.length()-1 ändern

EDIT: Naja, war jemand schneller als ich
Information is like a mist, you have to breath it in

(De-Phazz - Information)

This post has been edited 1 times, last edit by "Jethro" (May 16th 2006, 9:13pm)


Nadja

Trainee

  • "Nadja" is female
  • "Nadja" started this thread

Posts: 74

Date of registration: Apr 11th 2006

4

Tuesday, May 16th 2006, 9:14pm

Danke................ :-)

maffe

Unregistered

5

Tuesday, May 16th 2006, 11:09pm

Oder einfach < statt <= nehmen, damit spart man die kostbare Rechenzeit der (ggf. sogar wiederholten) Subtraktion :D

ruffy85

Trainee

  • "ruffy85" is male

Posts: 103

Date of registration: Oct 12th 2005

Location: Hildesheim

Occupation: B.Sc. Informatik / 1. Semester

6

Wednesday, May 17th 2006, 8:46pm

:-D Mir fällt gerade etwas unschlüssiges in der Aufgabenstellung auf. Soll man nur eine Zeichenkette umwandeln können oder auch ganze Sätze mit Leerzeichen? Wenn Leerzeichen vorhanden sind, muss man ja diese überspringen, es handelt sich dabei ja nicht um Buchstaben. Habe dazu einfach mal

Source code

1
if(Character.isWhitespace(bas)){aus+=" ";}

eingefügt um Leerzeichen zu erkennen und dafür in der Ausgabe aus ein Leerzeichen hinzuzufügen.

Genauso sinnlos sehe ich die Anwendung von stringb uilder an, hab des auch noch net drin, geht ja mit einem String aus, zu den man immer die neuen Zeichen hinzufügt. Ist am Ende auch perfomanter als stringbuilder, wenn ich die Dokumentation richtig gelesen habe. stringbuilder "ersetzt" ja auch nur stringbuffer...

This post has been edited 2 times, last edit by "ruffy85" (May 17th 2006, 9:13pm)


maffe

Unregistered

7

Wednesday, May 17th 2006, 9:27pm

Also ich denke mal, dass man nicht-Buchstaben (siehe auch Hinweis auf isLetter) einfach unverändert übernehmen soll. Dazu braucht's kein isWhitespace o. Ä. …

ruffy85

Trainee

  • "ruffy85" is male

Posts: 103

Date of registration: Oct 12th 2005

Location: Hildesheim

Occupation: B.Sc. Informatik / 1. Semester

8

Wednesday, May 17th 2006, 9:46pm

Das ist mal wieder eine tolle Aufgabenstellung X( Wieder nicht eindeutig, was gefordert ist. Und Hinweise gibt es nur online... Ich lasse meine Aufgabe jetzt so, es werden nur Zeichen und Leerzeichen übernommen, alles andere wie z.B. Zahlen werden herausgefiltert. Sehe es nicht ein, mein Programm nun noch zu ändern.

RedKen

Trainee

  • "RedKen" is male

Posts: 105

Date of registration: Nov 15th 2004

Location: Hannover Rock-City

9

Thursday, May 18th 2006, 8:45am

Quoted

Original von ruffy85
Genauso sinnlos sehe ich die Anwendung von stringb uilder an, hab des auch noch net drin, geht ja mit einem String aus, zu den man immer die neuen Zeichen hinzufügt. Ist am Ende auch perfomanter als stringbuilder, wenn ich die Dokumentation richtig gelesen habe. stringbuilder "ersetzt" ja auch nur stringbuffer...

Also wenn ich dich richtig verstehe ist aus ein String.
Soweit mir bekannt wird in Java beim hinzufügen von Zeichen zu einem String Objekt ein neuer String erzeugt, mit den alten und den hinzugefügten Zeichen, unddas alte Objekt liegt dann noch solange im Speicher, bis der Garbage-Collector vorbeikommt. Wenn du also eine Eingabe Zeichen für Zeichen zu einem String hinzufügst verhilfst du dem GC zu viel Arbeit und ob das eine besser Perfomance brigt als ein Stringbuffer, der einfach entsprechen Speicher reserviert und nur einmal, nach der Erzeugeung des fertigen Strings, gelöscht wird, halte ich für fraglich.
Das mag alles bei so kleinen Beispielen nicht so schlimm sein, aber wenn schon Perfomance Übelegungen...
ich sitz' am Puls der Zeit und schneid' und schneid' und schneid'...

This post has been edited 1 times, last edit by "RedKen" (May 18th 2006, 8:46am)


RedKen

Trainee

  • "RedKen" is male

Posts: 105

Date of registration: Nov 15th 2004

Location: Hannover Rock-City

10

Thursday, May 18th 2006, 8:46am

huch, doppelpost.
ich sitz' am Puls der Zeit und schneid' und schneid' und schneid'...

This post has been edited 1 times, last edit by "RedKen" (May 18th 2006, 4:37pm)


Markus

the one and only Unterstrich!

Posts: 2,571

Date of registration: Oct 9th 2003

11

Thursday, May 18th 2006, 1:50pm

Quoted

Original von ruffy85
Das ist mal wieder eine tolle Aufgabenstellung X( Wieder nicht eindeutig, was gefordert ist. Und Hinweise gibt es nur online... Ich lasse meine Aufgabe jetzt so, es werden nur Zeichen und Leerzeichen übernommen, alles andere wie z.B. Zahlen werden herausgefiltert. Sehe es nicht ein, mein Programm nun noch zu ändern.


Was genau verstehst du denn nicht?

Du durchläufst den String mit charAt.
Überprüfst, ob das ein Buchstabe ist (isLetter) und wenn ja, dann toLowerCase.
Dann das ganze als StringBuilder machen (warum das eben performanter ist und nicht anders herum siehe den guten Post von RedKen), in String umwandeln und ausgeben.

Und dass es die Tipps nur online gibt liegt vor allem daran, dass es im Nachhinein noch Tipps gibt. Und die Tipps erst zur nächsten Vorlesung zu geben würde ja nichts bringen....
Charmant sein? Hab ich längst aufgegeben. Glaubt mir doch eh keiner...

PhilRM

Gründer

  • "PhilRM" is male

Posts: 867

Date of registration: Dec 9th 2001

Location: Hannover

Occupation: äh... :)

12

Thursday, May 18th 2006, 4:24pm

Bemerkung am Rande zu StringBuffer vs. StringBuilder: StringBuffer ist thread safe, StringBuilder nicht. Daher ist StringBuilder tendenziell schneller. Beide haben ihren Zweck. StringBuilder ersetzt StringBuffer daher nicht.
"Sie haben also einen, äh, einen Master of Bachelor?" (Human Resources, T-Systems, Cebit)

Dot

Senior Schreiberling

Posts: 618

Date of registration: Feb 3rd 2003

Location: Ex-Europameisterland

Occupation: 4TheScience

13

Thursday, May 18th 2006, 8:18pm

Könnt ihr mir vielleicht sagen bis wohin er gekommen ist am Dienstag?
C:\reality.sys has errors - Reboot the universe? (Y/N)

Real programmers don't comment their code.
It was hard to write, it should be hard to understand

Warui

Turner, Serveradmin & Workaholic

  • "Warui" is male

Posts: 717

Date of registration: Apr 25th 2006

Location: Südstadt

Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))

14

Friday, May 19th 2006, 1:40pm

Wahrscheinlich ungefähr bis 6.5.3 oder so, sonst stände noch was von wegen Dokumentation in der Aufgabe ^.^
Wenn du dich am Skript orientierst, musst du sowieso bis 6.5.3 lesen wegen den jar-Dateien :)

Mata ne
Warui
Erwachsenwerden? Ich mach ja viel Scheiß mit, aber nicht jeden!

Dot

Senior Schreiberling

Posts: 618

Date of registration: Feb 3rd 2003

Location: Ex-Europameisterland

Occupation: 4TheScience

15

Friday, May 19th 2006, 7:47pm

Bei Aufgabe 1 sollen wir ja ene Methode anlegen,die einen Fruehling und die Anzahl der Tage übergeben bekommt.Aber um einen Fruehling zu übergeben,muss ich ja schon einen erstellt haben. Und wenn ich einen erstelle, dann habe ich ihm doch schon die Tage übergeben,also dem Fruehling. Wieso sollen wir der Methode simulation nochmal die Tage übergeben?
C:\reality.sys has errors - Reboot the universe? (Y/N)

Real programmers don't comment their code.
It was hard to write, it should be hard to understand

Warui

Turner, Serveradmin & Workaholic

  • "Warui" is male

Posts: 717

Date of registration: Apr 25th 2006

Location: Südstadt

Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))

16

Friday, May 19th 2006, 8:02pm

ich tippe darauf, dass ursprünglich gemeint war, dass die Methode simuliere() auch die Simulation übernehmen sollte und der Konstruktor die Konstruktor-Funktion .... wie sich das gehört :)
Dann wäre die Anzahl der Tage auch in der Methode simuliere() interessant gewesen .... aber du hast schon recht :D

Mata ne
Warui
Erwachsenwerden? Ich mach ja viel Scheiß mit, aber nicht jeden!

Dot

Senior Schreiberling

Posts: 618

Date of registration: Feb 3rd 2003

Location: Ex-Europameisterland

Occupation: 4TheScience

17

Saturday, May 20th 2006, 12:02am

Okay,dann weiss ich ja bescheid.Danke :)
Und dann noch zu diesen Zustandsmethoden in Blume, Wuehlmaus, Fruehling, kann mir das mal jemand in vertändlichem Deutsch(oder Griechisch :D) erklären?Ich weiss zwar wofür die da sind,aber so richtig versteh ich nicht wie ich die implementieren soll wie es da steht.
C:\reality.sys has errors - Reboot the universe? (Y/N)

Real programmers don't comment their code.
It was hard to write, it should be hard to understand

This post has been edited 1 times, last edit by "Dot" (May 20th 2006, 12:02am)


Warui

Turner, Serveradmin & Workaholic

  • "Warui" is male

Posts: 717

Date of registration: Apr 25th 2006

Location: Südstadt

Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))

18

Saturday, May 20th 2006, 4:01am

Ging mir am Anfang wie dir, aber es ist gar nicht so seltsam, wie es dasteht.
im Frühling hast du da diese (static(?)) Methode (Rückgabewert am besten boolean) gleicherZustand() ... die wird aufgerufen von Simulation.simluliere() und bekommt von der auch noch den anderen Fruehling uebergeben.
Da sie nun die Referenz auf den anderen Fruehling hat, hat sie auch Zugang zu dessen public Variablen und Methoden. Jetzt übergibst du nacheinander deinen Blumen die korrespondierende Blume ...

Source code

1
2
this.blume1.gleicherZustand(andererFruehling.blume1);
(Oder halt mit entsprechenden Getter-Methoden ... getBlume1() *achselzuck*)

Die kann dann intern ganz einfach den eigenen Zustand mit dem der anderen Blume vergleichen und einen dementsprechenden Return-Wert liefern.
Datselbe in Grün mit deiner Maus (oder deinen Mäusen, wenn du zuviel am Code rumgespielt hast :D).
Jetzt brauchst du nur noch eine lokale boolesche Variable, der jedesmal der Rückgabewert der anderen Objekte (Blumen, Mäusen) zugewiesen wurde, und die gibst du deinerseits an Simulation.simuliere() zurück.
Dort hast du ebenfalls eine lokale boolesche Variable so behandelt, dass du am Ende nur noch deren Wert prüfen musst und dich in der Simulaionsklasse kein bisschen mehr um die Programmlogik/Implementierung kümmern musst. :D

Ich glaub, besser erklärt krieg ichs nicht, ohne das Programm direkt hinzuschreiben :)

Das alles funktioniert auch ganz wunderbar mit Arrays und ähnlichem, ich lass es standardmäßig mit MAXINT Blume MAXINT/5 Mäusen, einem Monat und an die 50 Frühlinge durchlaufen ... und ja, es ist schnell genug, wenn man die Ausgabe abschaltet (oder sie in StringBuffer schreiben würde ... hab ich mir sagen lassen ^.^) ;)

Mata ne
Warui
Erwachsenwerden? Ich mach ja viel Scheiß mit, aber nicht jeden!

Dot

Senior Schreiberling

Posts: 618

Date of registration: Feb 3rd 2003

Location: Ex-Europameisterland

Occupation: 4TheScience

19

Saturday, May 20th 2006, 3:44pm

Ähm ja, okay*g
Aber ich versteh es trotzdem nicht :D
Also die Blume soll jetzt z.B. die Methode GleicherZustand haben.
Die soll false oder true ausgeben.Aber was genau vergleicht diese Methode?
C:\reality.sys has errors - Reboot the universe? (Y/N)

Real programmers don't comment their code.
It was hard to write, it should be hard to understand

Warui

Turner, Serveradmin & Workaholic

  • "Warui" is male

Posts: 717

Date of registration: Apr 25th 2006

Location: Südstadt

Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))

20

Saturday, May 20th 2006, 4:13pm

ob ihr Endzustand derselbe ist, wie bei "derselben" Blume des anderen Frühlings

Mata ne
Warui
Erwachsenwerden? Ich mach ja viel Scheiß mit, aber nicht jeden!