Stringvergleich mit CharAt

Status
Nicht offen für weitere Antworten.

Fantajim

Mitglied
Hallo zusammen hab ein neues Problem

Grundidee des Programm ist es Buchstaben im ersten String mit dem 2ten abzugleichen und an welcher Stelle eine Überinstimmung erfolgt. Ich happere aber doch jetzt schon und hab den ersten Zähler noch nicht eingebaut..

Kann mir bitte wer sagen ich das else if formulieren muss, das wenn keine Übereinstimmung vorliegt das -1 angesteuert wird?

[Java]
public class AufgabeBtest {
public static void main(String[] args) {
String a = args[0];
String b = args[1];
int d = 0;
for(int c = 0; c < b.length(); c++){
d = c;
char last = b.charAt(d);
char first = a.charAt(0);
if (first==last){
System.out.println(d);
}
else if (hier fehlt Code hab schon viel probiert...){
continue;
}
else {

System.out.println("-1");

}
}
}
}
[/code]
 
Zuletzt bearbeitet:
wozu ist d, wenn es immer gleich c ist?
soll nur mit dem ersten Zeichen von a verglichen werden oder mit allen?
falls mit allen: String.contains() oder eine zweite innere Schleife, die alle Zeichen von a durchläuft

---

was soll denn bei 13 passieren?
wieso nicht einfach 13-15 weglassen, also

if (first==last){
System.out.println(d);
}
else {
System.out.println("-1");
}

dann wird doch 'wenn keine Übereinstimmung vorliegt das -1 angesteuert wird'


falls du natürlich noch die innere Schleife einbaust muss das etwa so aussehen:

boolean found = false;
for Schleife ..
// am Ende found true oder false
if: gefunden
else: -1
 
Hallo und danke für die schnelle Antwort.

hab erst eben angefangen und vorher noch nie programmiert, hab noch arge Logikfehler.. das mit dem d=c kann ich mir sparen das war mir nicht aufgefallen.

das mit der 2ten Schlaufe mache ich sobald ich das mit der ersten hinbekommen habe.

ich möchte nicht das mir die Konsole nicht 8x -1 ausgibt sondern nur 1x mal.
hab da an etwas wie else if(....) {
continue;
}
gedacht...

Greetz
Fantajim
 
Zuletzt bearbeitet:
na dann ist das so ähnlich, dann muss das found vor die erste Schleife bzw. die Variable muss wohl eher
anyCharNotFound
heißen,
im else-Fall setzt du diese Variable auf true, das kann ruhig mehrfach passieren,
am Ende prüfst du ob sie true ist und gibst dann EINMAL -1 aus
 
So ich hab wirklich viel versucht aber leider krieg ich es nicht hin die beiden Zähler aufeinander abzustimmen... das mit dem Boolean für treu war ne super idee und hat mir wirklich sehr viel gebracht ist jetzt im Code noch nicht eingebaut aber ist kein Problem mehr.

Kann mir jemand nen Tipp geben was der nächste Schritt wäre bitte?

ich versuch den ersten Zähler laufen zu lassen bis er was findet, wenn er nichts findet soll der zweite Zähler eins raufgehen und der erste wieder durchrasseln lassen. Wenn es eine Übereinstimmung gibt soll bei beiden Strings immer +1 addiert werden bis es nicht mehr übereinstimmt und die Position des ersten Übereinstimmens sowie ein TRUE abgeben. Hat wer ne Idee wie man das machen könnte?

Greetz
Fantajim

Java:
public class test {
	public static void main(String[] args) {
String a = args[0];
String b = args[1];
int c = 0;
boolean any = false;

for(int d = 0; d < a.length(); d++){
		char last = b.charAt(c);
		char first = a.charAt(d);
			if (first==last){
				System.out.println(c);
abc2:				for(int e; d < a.length(); d++){
					for(int f; c < b.length(); c++){
					char last2 = b.charAt(f);
					char first2 = a.charAt(e);
						if (first==last) {
						continue abc2;
						}
						else {
						break abc2;
						}
						}
						}
						}
			else {
		}
		}
	for(c = 0; c < b.length(); c++){
		break;	}
			
}
if(!any) {
System.out.println("-1");
}
else{
System.out.println("ok");
}
}
}
 
was ist nochmal überhaupt das Endziel, was soll der Code genau tun, gib mal Beispiele, also a, b und gewünschtes Ergebnis

'erster Zähler', 'zweiter Zähler' ist nur schwer bis gar nicht im Code zu finden, worum gehts?
'bei beiden Strings immer +1 addiert werden' kann ich auch nirgends erkennen, vom Sinn ganz zu schweigen


> for(int d = 0; d < a.length(); d++){
[..]
> abc2: for(int e; d < a.length(); d++){

niemals die Schleifenvariablen wie d woanders verändern lassen, schon gar nicht in einer zweiten Schleife,
die Variable e hat auch wenig Bedeutung

> for(int f; c < b.length(); c++){

int f genauso fraglich wie e
 
Zuletzt bearbeitet von einem Moderator:
Sorry für Doppelpost..

argh war nicht angemeldet...

hier nochmal richtig:

Ok
Beispiel 1:
Startparameter: hallo ihhallo
Ausgabe: 2
ok
Beispiel 2:
param: hallo ihhallu
Ausgabe: -1

Ich werde nochmals dran arbeiten und mir deine Hinweise nochmals anschauen. Vieles das ich mache macht noch keinen Sinn da ich ausprobieren möchte was geht und was nicht.

Ich poste Morgen eine anständigeren Ansatz, bitte mach dir keine Mühe.

Greetz
Fantajim
 
Ok hab was neues der Code funktioniert, jedoch nur wenn die Übereinstimmung bei 0 oder 1 auftritt im 2ten String, aber warum nicht bei der 3 oder 7ten Stelle?
also:
Bsp das funktioniert:
hi ihi
Bsp das happert:
hi iiiiiiiiiiiiihi

Edit: ich habs... hab bei der for Schlaufe a.length anstatt b.length... Danke vielmals für deine Hilfe Slater!!

Java:
public class test {
	public static void main(String[] args) {
String a = args[0];
String b = args[1];
boolean any = false;
Schleife:for(int c = 0; c < b.length(); c++){
		char last = b.charAt(c);
		char first = a.charAt(0);
			if (first==last){
				 System.out.println(c);
				 	if(b.contains(a)){
				 	any = true;
				 	break Schleife;
									}
									else {
										any = false;
										}
							}
											}
			


if(!any) {
System.out.println("-1");
}
else{
System.out.println("ok");
}
}
}
 
Zuletzt bearbeitet:
im geposteten Code ist noch ne Menge falsch,

wieso wird das contains nur in einem if-Fall aufgerufen?

any = false; und any = true; dürfen nicht beide auftauchen,
was dein Programm eigentlich machen soll, habe ich immer noch nicht verstanden, die Beispiele geben es ohne Erklärung kaum wieder,
aber wenn man den normalen Fall betrachten 'alle Buchstaben von a auch in b drin',
dann wäre es folgendes schlecht:
a: xyz b: xz

x gefunden, -> true
y nicht gefunden -> false
z gefunden -> true

am Ende ist any true obwohl ein Zeichen fehlt,
daher: any am Anfang vor der Schleife auf true setzen und in der Schleife höchstens auf false, nie auf true

falls das die Intention war, bei anderem Programmsinn natürlich anpassen
 
Intention des Codes war es eine erste Übereinstimmung zu suchen, dann schauen ob der erste String komplett vorkommt an dieser Stelle, falls nicht weiterzusuchen.

habs mit ein paar Beispielen versucht und momentan einen anderen Code gemacht der vollends auf contain verzichtet.

Java:
package aufgabenblatt2;

public class AufgabeB {
	public static void main(String[] args) {
String a = "hallo";
String b = "hllhallo";
boolean any = false;
boolean any2 = false;
int e = 0;
Schleife:for(int c = 0; c < b.length(); c++)											{
		if(any2){
			if(c>(a.length()-e)){
				break;
			}
			e = c;
		}
		int d = 0;
		char last = b.charAt(c);
		char first = a.charAt(d);
			if (first==last)												  {
				for(d = 0; d < a.length(); d++)			   {
					char first2 = a.charAt(d);
					char last2 = b.charAt(c);
				 			if(first2==last2)      {
				 				if(b.length()<(e+a.length())){
				 					any = false;
				 					break Schleife;
				 				}
				 			c++;
				 			any = true;
				 			any2 = true;
				 			}
				 			else {
				 			d--;
				 			c--;
				 			any = false;
				 			break;
				 			}
				 			
				 			
				 			}
			}
				 			
else {
	continue;
}
				 				
}			 				
				 																				 																				 																														 																												
if(!any) {
System.out.println("-1");
}
else{
System.out.println("ok");
System.out.println("Position " +e);
}
}
}

Greetz
Fantajim
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben