الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طريقة تخزين مخرجات برنامج في متغير String

بدأه java123 في 28 يونيو 2012 · 8 رد · 1,170 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي مخرجات برنامج وأريد تخزينها في متغير من نوع String كيف ؟

سأريكم مثال مبسط جداً للبرنامج (البرنامج ليس هكذا ولكنه مثال فقط)

لدي ثلاث كلاسات s1,s2,s3

public class s1 {
	public String example1() {
		String i = "2";
		System.out.print(i);
		return "";

	}

}

public class s2 {
	public String example2(){
		s1 s=new s1();
		String i1="1";
		String i2="3";
		return i1+s.example1()+i2;

	}
}

public class s3 {
	public static void main(String[] arg) {

		s2 ss = new s2();
		System.out.println(ss.example2());
	}
}

الواضح : اريد عرض الارقام مرتبه 123 ولكنها تأتي 213

في هذا البرنامج البسيط استطيع وضعه بهذه الصوره

public class s1 {
	public String example1() {
		String i = "2";
		//System.out.print(i);
		return i;

	}

}

المشكله أنه يوجد في كلاس s1 العديد من الأكواد والـ (حوسه) .. لم أستطع ان اضعها في دالة return

مملاحظه : اريد الميثودات كما هي String ولا اريدها void كي لاتحصل مشاكل في باقي الكلاسات

#2

استدعاء s.example1() في الكلاس الثانية يتم قبل عمل return وبالتالي تطبع 2 أولا

لماذا لا تخزن القيمة 2 في متغير كـ Attribute في الكلاس الأولى وتطبعه في الكلاس الثانية؟

#3

اخي الكلاس عباره عن loops وكلام كثير .. وليس اتربيوت واحد فقط

ولكن ناتج الكلاس هو عباره عن string هل استطيع تخزين مخرجات الكلاس في اتربيوت ؟

#4

وما المشكلة، أنا أقصد أن تنشئ - مثلا - متغيرا سواء static أو instance كما تحب وتخزن فيه القيمة المطلوبة، مثال:

public class s1 {
        private String result;
        public String getResult(){
                return result;
        }

        public String example1() {
                String i = "2";
                result = i;
                return "";
        }
}

ومن ثم تستدعي getResult لترجع لك النتيجة المخزنة من أي كلاس أخرى ويمكنك طباعتها في الكلاس الأخرى

هذه مجرد فكرة أنا لا أعلم حقيقة ما هو موجود في برنامجك، لكن ربما تحتاج أيضا لمراجعة البرنامج للوصول لتركيب أبسط.

#5

لم أستطع فهمك بشكل جيد

حاول أن توضح أكثر

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#6

اشكرك اولا.ً

في داخل الكلاس يوجد مثلاً

While(){

if(){}

}

ناتج هذه الداله اريد تخزينه في متغير كي استدعيه .. محاولتي في استدعاء الميثود تنتج الخطأ في الاعلى ... فما الحل ؟

#7

حسب الكود الذي قمت بكتابته في الاعلى فان الخرج طبيعي حيث ان البرنامج يقرأ قيمة i1,i2 والتي هي 1و3 ,ولكنه يذهب الى الداله example1 التي تقوم بطباعة 2 ثم ترجع سترينغ فارغ

ثم يعود كودك الى الداله الاولى حيث تطبع i1 والذي هو 1 ثم مرجع الداله والذي هو فارغ بكل حال ثم تقوم بطباعة i2 والتي هي 3

هناك اكثر من طريقه لحل هذه المشكله واحدها هي التي ذكرتها انت في الاعلى ، و يمكنك ايضا عمل sort ترتيب للاسترينغ الاخير الذي هو 213 حتى يصبح 123 كما يمكنك خزن قيمة المتغير i في الدالة example1 في Preference ومن ثم قراءة هذا الpreference من الداله الاخير وغير ذلك من الحلول التي لا حصر لها

ملاحظة: بما انك مصمم على ان تمضي في كودك بهذه الطريقه الملتويه ، فهناك احتمال كبير ان بنية البرنامج غير صحيحه ، في مثل هذه الحاله سوف انصحك باعادة البرنامج ببنية افضل ولكن اتوقع ان تقول لي ان الكود اصبح طويل ومسأله اعادته خيار غير مطروح

تحياتي

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#8
mental-driller كتب:

حسب الكود الذي قمت بكتابته في الاعلى فان الخرج طبيعي حيث ان البرنامج يقرأ قيمة i1,i2 والتي هي 1و3 ,ولكنه يذهب الى الداله example1 التي تقوم بطباعة 2 ثم ترجع سترينغ فارغ

ثم يعود كودك الى الداله الاولى حيث تطبع i1 والذي هو 1 ثم مرجع الداله والذي هو فارغ بكل حال ثم تقوم بطباعة i2 والتي هي 3

هناك اكثر من طريقه لحل هذه المشكله واحدها هي التي ذكرتها انت في الاعلى ، و يمكنك ايضا عمل sort ترتيب للاسترينغ الاخير الذي هو 213 حتى يصبح 123 كما يمكنك خزن قيمة المتغير i في الدالة example1 في Preference ومن ثم قراءة هذا الpreference من الداله الاخير وغير ذلك من الحلول التي لا حصر لها

ملاحظة: بما انك مصمم على ان تمضي في كودك بهذه الطريقه الملتويه ، فهناك احتمال كبير ان بنية البرنامج غير صحيحه ، في مثل هذه الحاله سوف انصحك باعادة البرنامج ببنية افضل ولكن اتوقع ان تقول لي ان الكود اصبح طويل ومسأله اعادته خيار غير مطروح

تحياتي

اخي هذا مايجعلني افتح اكثر من كلاس .. حتى تسهل علي عملية متابعته وحتى ان اردت اعادة برمجته ستكون بسيطه بتعدد الكلاسات

وايضاً استدعاء نفس الكلاس اكثر من مره ( لتسهيل العمليه وتقليل الاكواد)

في الميثود الذي يعيد String فارغ ...

مثال قريب جداً لبرنامجي

import java.io.BufferedReader;

import java.io.FileReader;
import java.io.IOException;

public class sac {
	public static void main(String[] args) throws IOException {
		FileReader F = new FileReader("c:/thanku.txt");
		BufferedReader BR = new BufferedReader(F);
		String read = BR.readLine();
		int i1, i2;
		i1 = 0;
		i2 = 0;
		while ((read = BR.readLine()) != null) {

			if (read.contains("thank u")) {

				for (int i = 0; i < read.length(); i++) {
					if (read.charAt(i) == 'u') {
						i++;
						i1 = i;
						break;
					}
				}
				for (int ii = 0; ii < read.length(); ii++) {
					if (read.charAt(ii) == ';') {
						i2 = ii;
						break;
					}

				}
				while (i1 < i2) {
					System.out.print(read.charAt(i1));
					i1++;

				}
				System.out.println();

			}
		}
	}
}

وفي ملف thank u

thanks alot;
hello;
how r u;
test;
test123;
thank u mr.mohammed;
thank u null;
thank u A_Abuzaid;
thank u ala'a alsalhy;
thank u mental-driller;

المخرجات ستكون

 mr.mohammed
 null
 A_Abuzaid
 ala'a alsalhy
 mental-driller

اريد تخزين كل اسم في متغير .. او جميعها .. علماً بأن ناتج برنامجي الاساسي سيكون مخرج واحد .. على سبيل المثال mr.mohammed فقط

لهذا انا ارجع String فارغ ولا اعلم كيف ارجع المخرجات نفسها او ان يعمل برنامجي بالطريقه الطبيعيه التي اريدها

او كيف اخزن mr.mohammed في متغير واستدعي المتغير في الكلاس الاخر طبيعي .. اتمنى ان تكون الفكره واضحه

شكراً لك

#9

على ما يبدو لي انك تقوم باستخدام i1 و i2 لتحديد بداية ونهاية النص بعد كلمة thank you

يا سيدي سوف اقول لك ما يمكن ان يقوله غيري من الاعضاء وهو ان تستخدم الregular expressions

اذا لم يكن لديك الوقت لتعلمها ، فانصحك باستخدام الداله split في كلاس String حيث يمكنك مثلا ان تقوم بتقسيم الاسترينغ حول الفراغات

str.split("\\s");

او يمكنك ان تقسمها حول الكلمة thank you

str.split("thank you");

الفائدة هنا هي انك تقوم بعمل referencing كindex داخل مصفوفه سترينغ بدلا من حساب بداية ونهاية كل عنوان

ملاحظة: اذا كان الاسترينغ الذي تقوم بالتقسيم حوله غير موجود في الاسترينغ، فان مرجع الداله split هو مصفوفه سترينغ بنعصر واحد وهو الاسترينغ الاصلي من دون اي تغيير

هناك بعض الامور التي يجب ان تنتبه لها caveats عندما التعامل مع هذه الداله بعدها سوف يكون الامر بسيط جدا بالنسبة لك

اتمنى ان اكون قد اجبت على استفسارك ولو بشيئ بسيط

تحياتي

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

مواضيع مشابهة