كيف أجعل string.indexof() يتوقف عند النهاية string.length() في حلقة for في Java

برمجة


مرحبًا بالجميع، أنا أستخدم String.indexOf() للعثور على كافة تكرارات الحرف في سلسلة باستخدام حلقة for. المشكلة هي أنني علمت أنه إذا قمت بالتكرار على السلسلة في حلقة for حتى نهاية طول السلسلة، فيجب أن ينتهي التكرار ويطبع فقط تكرارات ذلك الحرف الذي تم العثور عليه ولكن حلقة for لا تزال تطبع -1، مما يعني أنها لم تتوقف بعد العثور على آخر تواجد للشخصية.

ما حاولت:

public static void main(String[] args) {

     String str1 = "hello from lagos";
	   String guess = "l";
	   int index = str1.indexOf(guess);
	   System.out.println("index is : " + index); // to show where the first occurrence is 
	   for(int i = 0; i < str1.length(); i++) {
		   System.out.println("For many ocuurrences: " + index);
		   index = str1.indexOf(guess, index + 1);
		      
	   }
	}

انتاج:

index is : 2
For many ocuurrences: 2
For many ocuurrences: 3
For many ocuurrences: 11
For many ocuurrences: -1
For many ocuurrences: 2
For many ocuurrences: 3
For many ocuurrences: 11
For many ocuurrences: -1
For many ocuurrences: 2
For many ocuurrences: 3
For many ocuurrences: 11
For many ocuurrences: -1
For many ocuurrences: 2
For many ocuurrences: 3
For many ocuurrences: 11
For many ocuurrences: -1

سؤالي هو: لماذا لم تتوقف الحلقة بعد طباعة أول 2 و 3 و 11. لماذا تتم طباعة -1 ولماذا لم تتوقف الحلقة بعد طباعة أول 11؟ شكرا على اي مساعدة.

الحل 1

هذا هو المكان الذي كان من الممكن أن يساعدك فيه تشغيل التعليمات البرمجية ضمن مصحح الأخطاء والتنقل خلال التعليمات البرمجية سطرًا تلو الآخر وفحص المتغيرات في حل هذه المشكلة بشكل أسرع مما كان من الممكن أن تكتبه في CodeProject.

المشكلة لا تتعلق بمؤشر. المشكلة هي إدارتك للحلقة.

لا ينبغي أن تستخدم أ for حلقة لهذا. أ while ستكون الحلقة أكثر ملاءمة، وتحتاج فقط إلى متغير واحد لتتبع موضع الحدث، وليس متغيرين.

コメント

タイトルとURLをコピーしました