public class Arrays {
public static void print(String[][] a){
for(int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
public static boolean isPartOf(String s1, String s2){
if(s1=="") return true;
String sub="";
for(int i=0;i<s1.length();i++){
for(int j=0;j<s2.length();j++){
if(sub==s1) return true;
else if(s1.charAt(i)!=s2.charAt(j)){
sub="";
continue;
}
else{
sub+=s2.charAt(j);
}
}
}
return false;
}
/*public static String[][] search(String[][] a){
}*/
//Main
public static void main(String[][] args){
System.out.print(isPartOf("bc", "abcd"));
}
}
Vermutlich rufst du gar nicht dein Programm auf, sondern ein anderes, denn du hast keine gültige main-Methode. Da ist ein eckiges Klammernpaar zu viel.
Da werden doch nur zweidimensionale Arrays benutzt?Warum wird hier ein eindimensionales Array benutzt und dann ein zweidimensionales Array zurückgegeben.
Hier:Wo ist ein eckiges Klammerpaar zuviel?
Das müsste so aussehen:Java:public static void main(String[][] args){
public static void main(String[] args){
Genau. Manchmal ist es hilfreich, sich zweidimensionale Arrays als eindimensionale Arrays vorzustellen, deren Elemente ebenfalls eindimensionale Arrays sind, deren Elemente die Elemente sind, um die es eigentlich geht. Davon wird bei dieser Aufgabe Gebrauch gemacht.b und a sind zweidimensionale Arrays, b[n++] und a sind jeweils Zeilen dieser Arrays.
public class Arrays {
public static void print(String[][] a){
for(int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
public static boolean isPartOf(String s1, String s2){
if(s1=="") return true;
int n=0;
String sub="";
outer: for(int i=0;i<s1.length();i++){
for(int j=0+ ++n;j<s2.length();j++){
if(sub==s1) return true;
else if(s1.charAt(i)!=s2.charAt(j)){
sub="";
i=0;
continue;
}
else{
sub+=s2.charAt(j);
n=j;
continue outer;
}
}
}
return sub==s1;
}
/*public static String[][] search(String[][] a, String s){
int n=0;
for(int i=0;i<a.length;i++){
if(isPartOf(s,a[i][a[i].length-1])){
n++;
}
}
String[][] b=new String[n][];
for(int i=0;i<n;i++){
for(int j=0;j<)
}
}*/
public static void main(String[] args) {
System.out.print(isPartOf("bc", "abcd"));
}
}
Der Algorithmus wird aber noch nicht funktionieren, falls der enthaltene String ganz am Anfang vorkommt.
for(int j=0+ ++n;j<s2.length();j++){
public static boolean isPartOf(String teilstring, String langerstring){
if(teilstring=="") return true;
int teilstringLaenge=0;
int zeiger=0, j=0;
outer:for(int i=0;i<teilstring.length();i++){
j+=zeiger;
for(j=zeiger;j<langerstring.length();j++){
if(teilstring.charAt(i)!=langerstring.charAt(j)){
teilstringLaenge=0;
zeiger++;
continue;
}
else{
teilstringLaenge++;
}
zeiger++;
continue outer;
}
}
return(teilstringLaenge==teilstring.length());
Strings werden nicht mit '==' verglichen, sondern mit derMethode 'equals' !!Warum wird mir hier kein true oder false in der Konsole ausgegeben, wenn ich die isPartof Methode verwende?
j+=zeiger;
ist übrigens auch überflüssig, denn in der darauf folgenden Zeile wird j ohnehin neu initialisiert. private static boolean isPartOf(String subString, String fullString) {
for (int fullStringPos=0; fullStringPos<fullString.length(); fullStringPos++) {
if (isMatchingAt(subString, fullString, fullStringPos))
return true;
}
return false;
}
private static boolean isMatchingAt(String subString, String fullString, int fullStringPos) {
if (subString.length()>fullString.length()-fullStringPos)
return false;
for (int subStringPos=0; subStringPos<subString.length(); subStringPos++, fullStringPos++)
if (subString.charAt(subStringPos)!=fullString.charAt(fullStringPos))
return false;
return true;
}
private static boolean isPartOf(String s, String part) {
outer: for (int i = 0; i <= s.length() - part.length(); i++) {
for (int j = 0; j < part.length(); j++) {
if (s.charAt(i + j) != part.charAt(j)) {
continue outer;
}
}
return true;
}
return false;
}