Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Über die Weihnachtszeit bekamen wir mehrer kleine Aufgaben gestellt, wobei ich momentan ein einer schon länger hänge!
Es sollen die Buchstaben eines Wortes in einer Folge erkannt werden, und die Stelle des letzten gefundenen Buchstabens ausgegeben werden.
als Beispiel: "hi hkliw" - Ausgabe: "4"
Ich hoffe mal ich bin auf dem richtigen Wege, aber Java bringt mir immer index out of bounds (mit sicherheit wegen etwas total offensichtlichem), ich denke sogar schon bei der Eingabe.
Hier mein bisheriger Code:
Java:
import java.util.Scanner;
//Aufgabe B: Galgenmaennchen
public class Galgen {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int k = sc.nextInt();
int l = 0;
String s;
String [] woerter = new String[k];
for(int i=0; i<k; i++) {
woerter [i] = sc.nextLine();
}
for(int i=0; i<k; i++) {
s = woerter[i];
l = s.length();
System.out.println( stelle(s.substring(0,s.indexOf(' ')), s.substring(( s.indexOf(' ') ), l-1 )) );
}
}
public static int stelle(String a,String b) {
int alen = a.length();
int highest = 0;
char aktuell;
for (int i=0; i<alen; i++) {
aktuell = a.charAt(i);
if (b.indexOf(aktuell) >= highest)
highest = b.indexOf(aktuell);
if (b.indexOf(aktuell) < 0) {
return 0;
}
}
return highest;
}
}
Dein Code erscheint mir sehr unübersichtlich, das Array das du benutzt kommt mir auch leicht unsinnig vor.
Vllt hab ich den Sinn deines Programms auch nicht ganz verstanden.
Habs mal abgeändert:
Java:
public static void main(String[] args) {
System.out.println("Zwei Wörter eingeben");
Scanner sc = new Scanner(System.in);
String eingabe = sc.nextLine();
String array[] = eingabe.split(" ");
int result = stelle(array[0], array[1]);
System.out.println("Stelle: "+ (result+1));
}
public static int stelle(String a, String b) {
int max = -1;
for (int i = 0; i < a.length(); i++) {
if (b.lastIndexOf(a.charAt(i)) > max) {
max = b.lastIndexOf(a.charAt(i));
}
}
return max;
}
Wenn ich dein Problem richtig verstanden habe sollte das so laufen.
Das beinhaltet jetzt noch keine Fehlerbehandlung. Dh eigentlich müsste man prüfen ob eine richtige Eingabe erfolgt ist sonst kriegste wieder eine ArrayIndexOutOfBoundsException wenn man zB nur ein Wort eingibt.
Der Grund für das Array ist, dass mehrere Eingaben möglich sein sollen..
in der ersten Eingabe wird also eine Integer Zahl verlangt, und so viele wortfolgen sollen dann eingelesen werden.
System.out.print sind deshalb nicht vorhanden, weil unsere Aufgaben durch ein "Kontrollprogramm" kontrolliert wird, welches unsere Lösung nur mit genau den vorgegebenen Ausgaben akzeptiert.
Problem ist, dass der Scanner im ersten nextLine() direkt ein leeres Zeichen einliest.
Du musst das Array also eins größer machen. So sollte das funktionieren:
Java:
public static void main(String[] args) {
System.out.println("Anzahl der Wörter");
Scanner sc = new Scanner(System.in);
int anzahl = sc.nextInt();
String[] array = new String[anzahl+1];
System.out.println("Bitte " + anzahl + " Wortpaare eingeben");
for (int i = 0; i <= anzahl; i++) {
array[i] = sc.nextLine();
}
for (int k = 1; k <= anzahl; k++) {
String splitString[]=array[k].split(" ");
System.out.println(array[k] + " \tStelle: " + (stelle(splitString[0], splitString[1])+1));
}
}
public static int stelle(String a, String b) {
int max = -1;
for (int i = 0; i < a.length(); i++) {
if (b.lastIndexOf(a.charAt(i)) > max) {
max = b.lastIndexOf(a.charAt(i));
}
}
return max;
}
Die Ausgaben kannste ja rauslöschen Übrigens hab ich das auch nicht auf Anhieb gesehen. Sowas findet man oft nur, wenn man den Debugger anschmeisst. Sollte man ab und zu mal benutzen