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

كيف استطيع استدعاء القيمة النهائية لمتغير من نوع String

مغلق
بدأه المستقيل في 9 يونيو 2007 · 23 رد · 1,283 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

import java.io.RandomAccessFile;
 import java.io.IOException;


 public class Datau {
 static String user;
 static String pass;
 static String sender;
 static String receiver;

 public static void main(String[] args) throws IOException {
 RandomAccessFile datau = new RandomAccessFile("datau.dat", "rwd");

 datau.writeBytes("ahmad\n");
 datau.writeBytes("admin\n");
 datau.writeBytes("962569874562\n");
 datau.writeBytes("9622148965788");
 user= datau.readLine();
 pass= datau.readLine();
 sender= datau.readLine();
 receiver= datau.readLine();
 System.out.println(user);
 System.out.println(pass);
 System.out.println(sender);
 System.out.println(receiver);
 }
 }

وعند استدعاء المتغير user مثلا تكون قيمته null

وهذا هو كود الاستدعاء من الاكلاس الاخر

String user1=Datau.user;

فهل استطيع استدعاء المتغير user بعد تخزين قيمة فيه ؟؟؟؟

#2

اخي المشكلة ليست في التغيير المشكلة هي فالكتابة والقراءة من الملف

لانك بعد ماكتبت مباشرة تريد القراءة منه مع ان الؤشر اصبح في النهاية

اكتب التعليمة

datau.seek(0);

هذه التعليمة تعيدك الى ااول الملف وبامكانك ان تنتقل الى اي محرف تريد القراءة منه

الوسيط 0 يعني اول محرف في الملف

اجعل هذه التعليمة بين القراءة والكتابة

ماذا أقول وفي فؤادي جمرة تزفو وفي العينين يزفو العمى شعب تولاه الخمول وأمة تمشي إلى الوراء بلا نظر هاقد شبعنا من كلام فارغ ومن القشور وغيرنا أكل الثمر فالعامل المسكين يقضي نحبه من جوعه وسواه من الأكل انفزر يا أمة ترجو الحياة شريفة كيف الوصول وبيننا الغش انتشر فكيف الحياة لنا تستجيب فهذا زمان قليل الحياء وهذا زمان جنون البشر

#3

لقد قمت بعمل هذا ولكن بقيت نفس المشكله

عندما استدعي المتغير يعطيني قيمته البدائية

لو فرضنا اني عرفت المتغير هكذا :

static String user="mahmoud";

فعند استدعائة هكذا :

Datau da = new Datau();
String user1=da.user;

System.out.println(user1);

يعطي mahmoud

فانه ياخذ القيمة البدائية

وانا اريد القيمة بعد التعديل

تم تعديل هذه المشاركة بواسطة المستقيل في 9 يونيو 2007 في 03:52

#4

كيف تمت عملية التغيير

ماذا أقول وفي فؤادي جمرة تزفو وفي العينين يزفو العمى شعب تولاه الخمول وأمة تمشي إلى الوراء بلا نظر هاقد شبعنا من كلام فارغ ومن القشور وغيرنا أكل الثمر فالعامل المسكين يقضي نحبه من جوعه وسواه من الأكل انفزر يا أمة ترجو الحياة شريفة كيف الوصول وبيننا الغش انتشر فكيف الحياة لنا تستجيب فهذا زمان قليل الحياء وهذا زمان جنون البشر

#5

هذا هو الكلاس الاول:

import java.io.RandomAccessFile;
import java.io.IOException;


public class Datau {
static String user;
static String pass;
static String sender;
static String receiver;
String user1;
public static void main(String[] args) throws IOException {
RandomAccessFile datau = new RandomAccessFile("datau.dat", "rwd");

datau.writeBytes("ahmad\n");
datau.writeBytes("admin\n");
datau.writeBytes("962569874562\n");
datau.writeBytes("9622148965788");

datau.seek(0);
user= datau.readLine();
pass= datau.readLine();
sender= datau.readLine();
receiver= datau.readLine();
System.out.println(user);
System.out.println(pass);
System.out.println(sender);
System.out.println(receiver);
 }

}

وعند عمل رن له يعطي هذه النتائج:

ahmad
admin
962569874562
9622148965788

وهذا الكلاس الثاني :

public class Test {


public static void main(String[] args) {
Datau da = new Datau();
String user1=da.user;

System.out.println(user1);
;
}
}

وعند عمل رن له يعطي هذه النتائج:

null
#6

هل تقصد بانك بعد ما تشغل الكلاس الاول تريد تشغيل الكلاس الثاني وتريد القيمة التي تعدلت بالتشغيل الاول

اخي الكريم عند تشغيل الكلاس الاول توضع القيمة البدائية في الذاكرة ولكن لا يمكن ان تصل اليها بواسطر تشغيل اي برنامج اخر

ممكن ان ترث الكلاث في كلاس اخر ولكن البرنامج كله ضمن تشغيل واحد(اقصد دالة main() واحدة)

اخي الكريم قلي تماما شو البرنامج اللي بدك تساويه وانا رح ساعدك فيه

ماذا أقول وفي فؤادي جمرة تزفو وفي العينين يزفو العمى شعب تولاه الخمول وأمة تمشي إلى الوراء بلا نظر هاقد شبعنا من كلام فارغ ومن القشور وغيرنا أكل الثمر فالعامل المسكين يقضي نحبه من جوعه وسواه من الأكل انفزر يا أمة ترجو الحياة شريفة كيف الوصول وبيننا الغش انتشر فكيف الحياة لنا تستجيب فهذا زمان قليل الحياء وهذا زمان جنون البشر

#7

اخي الكريم جميع المتحولات والاغراض تفقد قيمتها بعد انتهاء التنفيذ فاذا شغلناها مرة اخرى تعود الى الحالة البدائية

فهمت قصدي

ماذا أقول وفي فؤادي جمرة تزفو وفي العينين يزفو العمى شعب تولاه الخمول وأمة تمشي إلى الوراء بلا نظر هاقد شبعنا من كلام فارغ ومن القشور وغيرنا أكل الثمر فالعامل المسكين يقضي نحبه من جوعه وسواه من الأكل انفزر يا أمة ترجو الحياة شريفة كيف الوصول وبيننا الغش انتشر فكيف الحياة لنا تستجيب فهذا زمان قليل الحياء وهذا زمان جنون البشر

#8

شكرا على تعاونك اخي الكريم

لقد قمت بعمل مشروع يقوم بتشغيل الاجهزة الكهربائية عن طريق رسائل ال SMS ولقد انهيت البرنامج ولم يبقى لي سوى خطوة واحدة وهي كالتالي:

لقد قمت بعمل شاشة Login للبرنامج بحيث يدخل المستخدم الاسم وكلمة السر حتى يدخل الى الشاشة الرئيسية

ولكني اريد من المستخدم ان يتمكن من تغيير الاسم وكلمة السر متى اراد من بعد دخوله الى الشاشة الرئسية للبرنامج

وكما اريد ايضا ان امكن المستخدم من تغيير ارقام الهواتف التي تستخدم لارسال واستقبال رسائل ال SMS من خلال الشاشة الرئيسية فهناك رقمين واحد للارسال والثاني للاستقبال .

وكما ترى فان لدي اربع متغيرات الا وهي الاسم وكلمة السر و رقمين للهواتف

فاريد ان اقوم بصنع ملف مثل ما رايت في الكلاس الاول لاستطيع من قرائة المتغيرات فيه والتعديل عليها فيما بعد

ارجو ان يكون الشرح واضح

وشكرا جزيلا لتعاونك

تم تعديل هذه المشاركة بواسطة المستقيل في 9 يونيو 2007 في 04:35

#9

الامر جدا بسيط

هل تريد واجهات ازرار او يكفيك cosole

المهم

عند تسجيل الدخول نقوم بقراءة مايدخلة المستخدم ونقارنه مع محتوى الملف

اذا كانا متطابقين ننتقل الى البرنامج الذي اعدتته

ويكون فيه خيار للتغيير وننتقل الى مكان مانريد ونكتب فوق الاسم او الباسوورد

هل فهمت قصدي

ماذا أقول وفي فؤادي جمرة تزفو وفي العينين يزفو العمى شعب تولاه الخمول وأمة تمشي إلى الوراء بلا نظر هاقد شبعنا من كلام فارغ ومن القشور وغيرنا أكل الثمر فالعامل المسكين يقضي نحبه من جوعه وسواه من الأكل انفزر يا أمة ترجو الحياة شريفة كيف الوصول وبيننا الغش انتشر فكيف الحياة لنا تستجيب فهذا زمان قليل الحياء وهذا زمان جنون البشر

#10

انا هذا الذي اريده مقارنة ما يدخله المستخدم بالموجود بالملف

لقد قمت بعمل الشاشات المطلوبة وكل الفنكشن اللازمه لذلك ولكن لم يبقى لدي سوى القرائة والتعديل على الملف

مثلا هذا جزء من كود شاشة ال Login

B1.setText("Login");
		B1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
			{
				B1_actionPerformed(e);
if (T1.getText().equals("ahmad") && T2.getText().equals("admin"))
	{setVisible(false);
		Main main = new Main();
		main.show();
		SerialToGsm GSM =new SerialToGsm("378");
		GSM.connect("COM1");
}
		else
					{jLabel5.setText("Wrong User Name or Passowrd");}
			}

		});

ولكن كيف استطيع استدعاء قيمة من الملف لمقارنتها ؟؟؟؟؟؟؟؟؟؟

#11

هل من مجيب على هاذا الموضوع؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

#12

لقد قمت باضافة ميثود للكلاس الاول فاصبح بهذا الشكل:

import java.io.RandomAccessFile;
import java.io.IOException;


public class Datau {
static String user;
static String pass;
static String sender;
static String receiver;

public static void main(String[] args) throws IOException {
RandomAccessFile datau = new RandomAccessFile("datau.dat", "rwd");

datau.writeBytes("ahmad\n");
datau.writeBytes("admin\n");
datau.writeBytes("962569874562\n");
datau.writeBytes("9622148965788");

datau.seek(0);

user= datau.readLine();
pass= datau.readLine();
sender= datau.readLine();
receiver= datau.readLine();
System.out.println(user);
System.out.println(pass);
System.out.println(sender);
System.out.println(receiver);
 }

public static String getuser()
	{

	String user1=user;


	 return user1;  //could also return Cat.animalType
   }


}

ولقد قمت باستدعاء الميثود بهذا الشكل :

public class Test {


public static void main(String[] args) {
Datau da = new Datau();

String user2=da.getuser();


System.out.println(user2);
}
}

ولكن القيمة بقيت مثل ما هي null

فهل هناك طريقة لحل هذه المشكلة؟؟

#13

استبدل الكلاس Datau بهذا الكلاس

import java.io.RandomAccessFile;
import java.io.IOException;


public class Datau {
static String user;
static String pass;
static String sender;
static String receiver;
	public Datau() {
		try{
			RandomAccessFile datau = new RandomAccessFile("datau.dat", "rwd");

			datau.writeBytes("ahmad\n");
			datau.writeBytes("admin\n");
			datau.writeBytes("962569874562\n");
			datau.writeBytes("9622148965788");

			datau.seek(0);

			user= datau.readLine();
			pass= datau.readLine();
			sender= datau.readLine();
			receiver= datau.readLine();
//			System.out.println(user);
//			System.out.println(pass);
//			System.out.println(sender);
//			System.out.println(receiver);
		}catch(IOException ioe){
			ioe.printStackTrace();
		}
	}
	public String getuser(){
		return user;  //could also return Cat.animalType
	}
}
#14

حول متغير String الى integer

THANK YOU

من احب شيء ابدع وابتدع فيه

#15

شكرا جزيلا لك اخي Ali7876

ان الكود شغال بشكل جيد

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

import java.io.RandomAccessFile;
import java.io.IOException;


public class Datau {
static String user;
static String pass;
static String sender;
static String receiver;
	public Datau() {
		try{
			RandomAccessFile datau = new RandomAccessFile("datau.dat", "rwd");

			datau.writeBytes("ahmad\n");
			datau.writeBytes("admin\n");
			datau.writeBytes("962569874562\n");
			datau.writeBytes("9622148965788");

			datau.seek(0);

			user= datau.readLine();
			pass= datau.readLine();
			sender= datau.readLine();
			receiver= datau.readLine();

		}catch(IOException ioe){
			ioe.printStackTrace();
		}
	}
	public String getuser(){
		return user;  //could also return user name
	}

 public String getpass(){
		return pass;  //could also return password
	}
public String getnum1(){
		return sender;  //could also return phone number 1
}

public String getnum2(){
		return receiver;  //could also return phone number 1
}


}

ولكن هل هناك طريقة لعمل ميثود للكتابة على الملف

مثلا تغيير السطر الاول من ahmad الى Ali

ارجو ان يكون السؤال واضح

#16

السلام عليكم

في طريقة وهي انك تعيد ادخال البيانات مره اخرى. وتعيد حفظها للملف

#17

شكرا لك اخي الحرازي

ولكني اريد اعادة ادخال البانات من كلاس اخر

فهل استطيع استدعاء ميثود كتابة البيانات من كلاس اخر مثل ما قمت باستدعاء ميثود القرائة ؟؟؟

ولك جزيل الشكر

#18

مثلا انا قمت باستدعا احدى هذه الميثود هكذا:

B1.setText("Login");
		B1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
			{
				B1_actionPerformed(e);
				Datau da = new Datau();
if (T1.getText().equals(da.getuser()) && T2.getText().equals(da.getpass()))
	{setVisible(false);
		Main main = new Main();
		main.show();
		SerialToGsm GSM =new SerialToGsm("378");
		GSM.connect("COM1");
}
		else
					{jLabel5.setText("Wrong User Name or Passowrd");}
			}

		});

فهل استطيع القيام بعمل ميثود للكتابة على الملف واستدعائة؟؟؟؟؟؟؟؟

#19

طبعا تستطيع

تعمل ميثود تغير المدخلات ومن ثم تحفظها تاني وتقدر تستخدمها من كلاس اخر

#20

لقد قمت بمحاولة ذلك ولكني لم استطع

وهذا هو كود الملف الذي اريد ان اكتب واقرا منه

import java.io.RandomAccessFile;
import java.io.IOException;


public class Datau {
static String user;
static String pass;
static String sender;
static String receiver;
	public Datau() {
		try{
			RandomAccessFile datau = new RandomAccessFile("datau.dat", "rwd");
/*Change ch =new Change();
String x = che.z;
			datau.writeBytes("ahmad\n");
			datau.writeBytes("admin\n");
			datau.writeBytes("962776708412\n");
			datau.writeBytes("0776708407");
*/
			datau.seek(0);

			user= datau.readLine();
			pass= datau.readLine();
			sender= datau.readLine();
			receiver= datau.readLine();

		}catch(IOException ioe){
			ioe.printStackTrace();
		}
	}
	public String getuser(){
		return user;  //could also return user name
	}

 public String getpass(){
		return pass;  //could also return password
	}
public String getnum1(){
		return sender;  //could also return phone number 1
}

public String getnum2(){
		return receiver;  //could also return phone number 2
}


}
#21

تفضل اخي

هذا الكود عدلت عليه شوي ، ما بعرف اذا في طرق افضل لكن هذا ما قدرت عليه، اضفت ميثود modify اذا لم يكن الملف data.dat موجود سيعطي المتغيرات قيم فارغة الا اذا كتبنا على الملف

هذا كود ال Datau.java

import java.io.RandomAccessFile;
import java.io.IOException;
import java.util.*;

public class Datau {
	static String user;
	static String pass;
	static String sender;
	static String receiver;
	public void reWrite() {

		try{
			RandomAccessFile datau = new RandomAccessFile("datau.txt", "rwd");

			datau.writeBytes(user+"\n");
			datau.writeBytes(pass+"\n");
			datau.writeBytes(sender+"\n");
			datau.writeBytes(receiver);

			datau.seek(0);

			user= datau.readLine();
			pass= datau.readLine();
			sender= datau.readLine();
			receiver= datau.readLine();

		}catch(IOException ioe){
			ioe.printStackTrace();
		}
	}


	public void modify(String a, String b, String c, String d){
		this.user=a;
		this.pass=b;
		this.sender=c;
		this.receiver=d;
		reWrite();
	}

	public  Datau()
	{

		try{
		RandomAccessFile datau = new RandomAccessFile("datau.txt", "rwd");
		if (datau.length()==0){
		this.user="";
		this.pass="";
		this.sender="";
		this.receiver="";
		}
		else{

		this.user="user";
		this.pass="pass";
		this.sender="sender";
		this.receiver="receiver";
		}  

		}catch(IOException ioe){
			ioe.printStackTrace();
	  }		
	}

	public String getuser(){
		return user;  
	}
	public String toString(){
	return
		"User :" +user+"\n"+
		"pass :" +pass+"\n"+
		"sender: " +sender+"\n"+
		"receiver: "+receiver;

	}

}

وهذا لل test

public class test{
	 public static void main(String args[]){
		Datau m=new Datau();
		System.out.println(m.toString()+"\n\n");

		m.modify("khaled",m.pass,m.sender,m.receiver);
		System.out.println(m.toString()+"\n\n");

		m.modify("khaled","sdfsdf",m.sender,"000236598");
		System.out.println(m.toString());

		Datau m2=new Datau();
		System.out.println("\n\n"+m2.toString());
	}
}
#22

طبعا البيانات التي تدخلها للميثود modify ترتيبها التالي

  modify(String user, String pass, String sender, String receiver)
#23

الان لو كنت اريد ان استبدل محتوى المتغير user والذي هو ahmad بكلمة يدخلها المستخدم

ولنفرض ان المستخدم ادخل كلمة في مربع النص رقم ثلاثة

مثلا انا في المثال التالي افحص الكلمتين التي يدخلهما المستخدم فاذا كان طول كل منهما 12

اريد من البرنامج ان ياخذ الكلمة التي في مربع النص رقم 3 ويحفظها في الملف بدلا من كلمة ahmad والتي هي في السطر الاول من ملف ال Datau.dat

//
		// jButton1
		//
		jButton1.setText("Ok");
		jButton1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
			{
				jButton1_actionPerformed(e);
			String x=jTextField1.getText();
			String y =jTextField2.getText();
			if (x.length()==12 && y.length()==12)
				{String z=jTextField3.getText();

								} 

			}

		});
#24

اتمنى ان يفي هذا الكود بالغرض ..

import java.io.*;

public class Data {

	private String user;
	private String pass;
	private String sender;
	private String receiver;

	private String fileName="data.txt";

	private RandomAccessFile raf;

	public Data() {
		fileName="data.txt";
		try{
			raf = new RandomAccessFile(fileName, "rwd");
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	public void write(String user, String pass, String sender, String receiver){
		try{
			this.remove();
			raf.writeBytes(getString( user, pass, sender, receiver));
			raf.seek(0);
			this.read();
		}catch(IOException ioe){
			ioe.printStackTrace();
		}
	}
	public void read(){
		try{
			String line = raf.readLine();
			raf.seek(0);
			String[]data=line.split("\t");
			setAll(data);
		}catch(IOException ioe){
			ioe.printStackTrace();
		}
	}
	public void update(){
		write( getUser(), getPass(), getSender(), getReceiver());
	}
	public void update(String user, String pass, String sender, String receiver){
		write( user, pass, sender, receiver);
	}

	private void setAll(String[]data){
		setUser(data[0]);
		setPass(data[1]);
		setSender(data[2]);
		setReceiver(data[3]);
		return;
	}
	private void remove(){
		try{
			raf.setLength(0);
		}catch(IOException ioe){
			ioe.printStackTrace();
		}
	}

	public void close(){
		try{
			raf.close();	
		}catch(IOException ioe){
			ioe.printStackTrace();
		}
	}

	public String getString(String user, String pass, String sender, String receiver){
		String tab="\t";
		StringBuffer sb=new StringBuffer();
		sb.append(user).append(tab).append(pass).append(tab).append(sender).append(tab).append(receiver);
		return sb.toString();
	}

	public String getUser(){return user;}	
	public String getPass(){return pass;}
	public String getSender(){return sender;}	
	public String getReceiver(){return receiver;}

	public void setUser(String v){user=v;}
	public void setPass(String v){pass=v;}
	public void setSender(String v){sender=v;}
	public void setReceiver(String v){receiver=v;}



	public String toString(){
		return getString( user, pass, sender, receiver);
	}
}

و هذا لتجربة الكود

 class Test1 { //لكتابة جديد
	public static void main(String[] args) {
		Data d = new Data();
		d.write("ahmad","admin","962569874562","9622148965788");
		System.out.println(d);
		d.close();
	}
}


// class Test3 { // للتعديل
//	public static void main(String[] args) {
//		Data d = new Data();
//		d.read();
//		d.setPass("OoOoOoOoOoO");
//		d.update();
//		System.out.println(d);
//		d.close();
//	}
//}

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…