Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Probleme bei folgender Aufgabe:

Hallo zusammen,

ich hatte ja bereits eine Frage gestellt und auch schon beantwortet bekommen, dafür noch mal Danke!

Nun stehe ich aber vor einer weiteren Aufgabe wie der Ochs vorm Berg!
Folgende Aufgabe und mein Problem/Lösungsansatz.

Was gibt das Programm auf der Konsole aus, wenn Sie meine E-Mail-Adresse eingeben?
import javax.swing.JOptionPane;
public class Test7 {
  public static void main(String[] args) {
    String m,s;
    int laenge, pos=0;
    m=JOptionPane.showInputDialog("Ihre E-Mail-Adresse?");
//werner.mueller@fh-koeln.de
//          1         2
//01234567890123456789012345
    laenge=m.length();
    for(int i=0;i<laenge;i++){
      s=m.substring(i,i+1);
      if(s.equals(".")){
        pos=i;
        System.out.println(pos);
      }
    }
    System.out.println(m.substring(pos+1,laenge));
  }
}

Hier die Musterlösung
Konsolausgabe:
6
23
de

Ich kann weder die Position 6 noch 23 ganz nachvollziehen. Java arbeite ja mit einem Index im Gegensatz zu vielen anderen Sprachen. Wird die 0 jedoch nicht mitgerechnet? Bei anderen substring Aufgaben wurde die 0 immer mitgerechnet, hier scheinbar nicht. Oder habe ich einfach einen Denkfehler?

Meiner Meinung nach müsste die Lösung heißen:
7
24
de (hier auch)??
Dachte eigentlich, das ich substring soweit drin hätte, aber irgendwie dann doch nicht.

Über konstruktive Hilfe wäre ich sehr dankbar!

Viele Grüße
J-A


Antworten zu Probleme bei folgender Aufgabe::

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Öhm, ja, die Musterlösung stimmt natürlich. Und sie kann auch nur dann stimmen, wenn man beim Zählen innerhalb des String bei 0 anfängt.

Zähl' doch einfach mal selber im String nach, bei welchen Indizes die Punkte auftauchen, und beginne bei 0.

Wenn was spezifisches unklar ist, frag nochmal ;)

greez 8)
JoSsiF

Gefahr erkannt, Gefahr gebannt?
Ich glaub' ich habe meinen Denkfehler erkannt.
Habe den ersten Stringwert, im o.g. Beispiel das "w" der 0 gleichgesetzt.
Allerdings habe ich dann, warum auch immer, beim abzählen die 0 mit 1 bewertet usw. Bin also quasi komplett 1 nach hinten gerutscht.

Muss ich halt dran denken, das ich das nicht alles unnötig verkompliziere.

Aber auch an dieser Stelle ein Dankeschön von mir!

 

Doch wieder ein kleines Verständnisproblem :(

Folgende Aufgabe:
Die Stringvariable matnr enthält eine beliebige 8-stellige Matrikelnummer. Welche Anweisung gibt die letzten drei Stellen auf der Konsole aus?

Lösung:
System.out.println(s.substring(5,8));

24680246 (Matrikelnummer)

01234567 (Index)

Warum verwende ich hier an dieser Stelle "s.substring (5,8));"?
Ich weiß ja, das der zweite Wert die erste nicht mehr zu berücksichtigen Position darstellt. Ist die 8 quasi eine Kennzeichnung für das Programm, das die Matrikelnummer hinter der 6 zu Ende ist?

Kann mir hier jemand etwas zu sagen?

Viele Grüße
J-A
I

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Korrekt. Allerdings gibt es auch noch eine andere Variante:

s.substring( 5 )
liefert den Substring von Position 5 bis zum Ende des Strings.

Super, vielen Dank für den Hinweis!

Noch ganz kurz, sofern Du noch da bist ;-)
Bei der ursprünglichen Aufgabe, ist dort der Wert für m.length() 25 oder 26? 25 wäre ja, wenn ich von 0 bis 25 durchzhähle, 26 aber wenn ich die 0 als ersten Wert ansehe!?

Müsste doch 26 sein?
Folgender Befehl würde doch das "e" von "de" abschneiden, wenn m.length() 25 beträgt?

System.out.println(m.substring(pos+1,laenge));

Das wäre dann auch meine letzt Frage *g*.

Deinem letzten Hinweis zu Folge müsste es doch aber auch gehen wenn man einfach nur pos+1 nimmt oder? Bin aber irgendwie zu "schisserich" für sowas und würde dann lieber dem Prof der Schnauze nach schreiben ;-)

Gruß
J-A

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Ja, ist 26. Da werden die Zeichen gezaehlt und bei 1 begonnen. Wenn eine Position angegeben/gezaehlt wird, faengt man bei 0 an. Ist anfangs ein wenig verwirrend, hatte ich auch so meine Probleme mit...

System.out.println( m.substring( pos+1, laenge ) );
System.out.println( m.substring( pos+1 ) );
ist in diesem Fall aequivalent und gibt nur das "e" aus.

Super, vielen Dank!
Das müsste es dann von mir gewesen sein.
Lg
J-A

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
Bei der ursprünglichen Aufgabe, ist dort der Wert für m.length() 25 oder 26? 25 wäre ja, wenn ich von 0 bis 25 durchzhähle, 26 aber wenn ich die 0 als ersten Wert ansehe!?

Ist etwas schwierig für den Anfang, aber vielleicht hilft es, wenn man konsequent zwischen Indizes und Mengen unterscheidet. Der String ist 26 Zeichen lang, daran ändert auch der Index 0 nichts. Hätte der String nur 1 Zeichen, würde length() trotzdem 1 zurückgeben, weil ja EIN Zeichen da ist, es geht also tatsächlich um die zählbare Menge der Zeichen :)

0..25 wären die Indizes zum Zugriff auf die einzelnen Zeichen. Ist eigentlich auch einfach zu merken, wenn man sich schonmal mit Arrays beschäftigt hat. Denn an sich ist ein String ja auch nichts anderes als ein Array von einzelnen Chars (also Zeichen). Beim Array beginnt die Indizierung bei 0, so auch beim String ;)

greez 8)
JoSsiF

« Suche Info zu "Selbstentpackendes ZIP ArchivProblem beim Ratespiel. »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Internet-Zugriffsprogramm
Ein Internet-Zugriffsprogramm, auch Browser genannt, stellt Internetseiten für den Benutzer dar. Am bekanntesten ist der Microsoft Internet Explorer, gefolgt vom kos...

Programm
Siehe Software...

Java
Java ist eine von der Firma SUN entwickelte Programmiersprache. Da Java unabhängig vom Betriebssystem läuft, kann ein einmal geschriebenes Programm auf allen Ja...