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

كيف يمكن اضافة Object الى مصفوفة

بدأه حامي الحمى في 16 أبريل 2009 · 17 رد · 1,083 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخواني اسف على طرح السؤال مرة ثانية، لكن لأن الأمر مستعجل وعلي انهائه اليوم، ومن اكثر من اسبوع وانا اكتب في البرنامج لكن في النهاية هذه الدالة ما بتعمل بشكل صحيح، ومش عارف الخطأ بالضبط وين

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

سؤالي كالتالي:

قمت بعمل برنامج عن الفورمولا 1، وعلي ان اكتب دالة التي تقوم باضافة سيارة الى مصفوفة

هذه هي الدالة التي كتبتها ارجو ان تقوموا بابلاغي ما هو الخطأ في هذه الدالة

public boolean addCarToArray(int licensePlate,int year, String 
manufacturer, String model,Color colour,int numDoors, double 
topSpeed, int totalRaces) {
if (carsArr.length<MAX_ARRAYS_LENGTH){
for (current_Length_Car_Array=0;current_Length_Car_Array<
MAX_ARRAYS_LENGTH;current_Length_Car_Array++){
if (carsArr[current_Length_Car_Array]==null){
carsArr[current_Length_Car_Array].getLicensePlate();
carsArr[current_Length_Car_Array].setLicensePlate(licensePlate);
carsArr[current_Length_Car_Array].getYear();
carsArr[current_Length_Car_Array].setYear(year);
carsArr[current_Length_Car_Array].getManufacture();
carsArr[current_Length_Car_Array].setManufacture(manufacturer);
carsArr[current_Length_Car_Array].getModel();
carsArr[current_Length_Car_Array].setModel(model);
carsArr[current_Length_Car_Array].getColor();
carsArr[current_Length_Car_Array].setColor(colour);
carsArr[current_Length_Car_Array].getNumDoors();
carsArr[current_Length_Car_Array].setNumDoors(numDoors);
carsArr[current_Length_Car_Array].getTopSpeed();
carsArr[current_Length_Car_Array].setTopSpeed(topSpeed);
return true;
}
else return false;
} 
}
return false;
}

فقام الأخ علاء بالرد علي بالرد التالي:

اقتباس
واضح في الدالة السابقة أنك لا تضيف أي شيء

كل ما تقوم به أنك تفحص على هل العنصر خالي أي يساوي null

بعد ذلك تقوم باتسدعاء get لهذا العنصر الخالي لذلك ستحصل على خطأ nullPointer

تحياتي

لكني لم افهم ما علي ان اقوم به لحل المشكلة، فقمت بالتغيير نوعاً ما وقمت باضافة المتغيرات بواسطة الـ constructor الذي باسم RaceCar لكنها ايضا لم تعمل.

وهذا ما قمت بكتابته،فأي الدالتين أقرب الى الصحيح؟

وما هو الحل برأيكم

	public boolean addCarToArray(int licensePlate,int year, String 
			manufacturer, String model,Color colour,int numDoors, double 
			topSpeed, int totalRaces) {
		int temp=0;
		if (carsArr.length<MAX_ARRAYS_LENGTH){
			for (current_Length_Car_Array=temp;current_Length_Car_Array<
			MAX_ARRAYS_LENGTH;current_Length_Car_Array++){
				if (carsArr[current_Length_Car_Array]==null){
					ArrayList <RaceCar> car=new ArrayList<RaceCar>();		
					car.add(new RaceCar(licensePlate,year,manufacturer, model,  colour,
					numDoors,topSpeed, totalRaces));
					temp=current_Length_Car_Array;
					return true;
				}
				else return false;
			}			
		}
		return false;
	 }

بارك الله فيكم مقدماً

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#2

سوف أفترض أن المصفوفة التي تريد الإضافة فيها هي carsArr :

public boolean addCarToArray(int licensePlate,int year, String manufacturer, String model,Color colour,int numDoors, double topSpeed, int totalRaces) {
	for (int i = 0; i < carsArr.length; i++ ){
		if ( carsArr==null ){
			carsArr=new RaceCar(licensePlate,year,manufacturer, model, colour, numDoors,topSpeed, totalRaces);
			return true;
		}
	}
	return false;
}

تم تعديل هذه المشاركة بواسطة المبرمج أحمد في 16 أبريل 2009 في 17:42 — السبب: تعديل الوسم Code

سبحان الله وبحمده ... سبحان الله العظيم

#3

السلام عليكم

بارك الله فيك اخي الكريم

قمت بالتعديل على الكود كما اخبرتني

لكن الآن لا يمكنني تشغيل الكود، والبرنامج يشير الى هذا الخطأ

Exception in thread "main" java.lang.NullPointerException

at RaceCar.<init>(RaceCar.java:8)

at SysF1.addCarToArray(SysF1.java:130)

at MainClass.main(MainClass.java:59)

هذه هي الاسطر من 128-130 في الدالة: (السطر 130 هو الأخير)

					if (carsArr[current_Length_Car_Array]==null){
					carsArr[current_Length_Car_Array]=new RaceCar(licensePlate,
							year,manufacturer, model,colour,numDoors,topSpeed, totalRaces);

والاسطر من 4- 8 في الكلاس RaceCar هي: (السطر 9 هو الأخير)

public class RaceCar extends Car{
	protected double topSpeed;
	protected int totalRaces;
	protected RaceDriver driver;
	protected double performanceRate=driver.totalScore/totalRaces;

وهذه هي الأسطر 58-61 في الكلاس MainClass: (السطر 59 هو السطر الثاني الذي فيه المشكلة)

		     else if (command.equals("addRaceCarToArray")){
		    	   sys.addCarToArray(input.nextInt(),input.nextInt(),input.next(),input.next(),	   
		    			            new Color(input.nextInt(),input.nextInt(),input.nextInt()),
		    			            input.nextInt(),input.nextDouble(),input.nextInt());

الرجاء ارشادي الى المشكلة

بارك الله فيكم سلفا

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#4

driver تساوي null

لهذا عندما تكتب الجملة

protected double performanceRate=driver.totalScore/totalRaces;

ستحصل على nullPointerException

لكي تتلافى هذا الخطأ انقل الجملة إلى بعد المكان الذي تقوم فيه بتعريف driver

سأتغاضى عن إعادة فتح الموضوع مرة أخرى

لكن أتمنى أن لا يحصل هذا مرة أخرى

تحياتي

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

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

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

728x90.png

#5
علاء الصالحي كتب:
driver تساوي null

لهذا عندما تكتب الجملة

protected double performanceRate=driver.totalScore/totalRaces;

ستحصل على nullPointerException

لكي تتلافى هذا الخطأ انقل الجملة إلى بعد المكان الذي تقوم فيه بتعريف driver

اضنه تلقائيا لن يتناسى هذا الموضوع ..

هل حاولت ان تقوم بعملية تنقيح مرة اخرى للـ method التي تقوم بعملية الادخال

لربما المشكلة باحدى method المستثمرة .

اذا كان الموضوع عقيم جدا ادرج الكود بملف كاملا

بالتوفيق

الله معك .

#6

بارك الله فيك أخي الكريم

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

وهذي اخر شغلة ناقصه

انا فهمت اللي حضرتك قلته وفكرت فيه من قبل وحاولت انقل مكان تعريف المتغير

لكني ما نجحت مش عارف لوين انقله، لكني بتوقع انه لازم يكون بعد الميثود addRaceDriverToArray

لكن مش عارف وين وكيف بالضبط

هذا الدالتين الخاصة بالاضافة

	/**
	 * This method creates and adds new Race Car to Race Cars array.
	 * @param licensePlate
	 * @param year
	 * @param manufacturer
	 * @param model
	 * @param colour
	 * @param numDoors
	 * @param topSpeed
	 * @param totalRaces
	 * @return true if new car added successfully to race cars array, 
	false if array has no room for more cars. 
	*/
	public boolean addCarToArray(int licensePlate,int year, String 
			manufacturer, String model,Color colour,int numDoors, double 
			topSpeed, int totalRaces) {
			for (current_Length_Car_Array=0;current_Length_Car_Array<
			carsArr.length;current_Length_Car_Array++){
				if (carsArr[current_Length_Car_Array]==null){
					carsArr[current_Length_Car_Array]=new RaceCar(licensePlate,
							year,manufacturer, model,colour,numDoors,topSpeed, totalRaces);
					return true;
				}
			}
			return false;
	 }	


	 /** This method creates and adds new Race Driver to Race Drivers array.
	  * @param licenseNumber
	  * @param fullName
	  * @param nationality
	  * @param dateOfBirth
	  * @param team
	  * @param worldChampionships
	  * @param totalScore
	  * @param highestRaceFinish
	  * @return true if new race driver added successfully to race drivers 
	  array, false if array has no room for more drivers. 
	  */


	 public boolean addRaceDriverToArray(String licenseNumber, String fullName
			 ,String nationality,Date dateOfBirth,String team, int 
			 worldChampionships,int totalScore, int highestRaceFinish) {	
			for (current_Length_Driver_Array=0;current_Length_Driver_Array<
			driversArr.length;current_Length_Driver_Array++){
				if (driversArr[current_Length_Driver_Array]==null){
					driversArr[current_Length_Driver_Array]=new RaceDriver
					(licenseNumber,fullName,nationality, dateOfBirth, team,
							worldChampionships,totalScore , highestRaceFinish);
					return true;
				}
			}
			return false;
	 }	

	 /**
	  * This method creates a connection between race driver to race car,
	  * the method finds a car by carLicensePlate in an array and finds race
driver in drivers
	  * array by driverLicenseNumber. If both objects are found then we can 
relate this specific car to specific 
	  * driver. The adding car to driver performed by sending car object to 
driver and driver object to car.
	  * If driver already has other car connecting a new car will fail, also 
if the car already connected to other driver
	  * new connection will fail. 
	  * @param driverLicenseNumber
	  * @param carLicensePlate
	  * @return true if both objects found and connected, false otherwise.
	  */


	 public boolean addRaceCarToDriver(String driverLicenseNumber,int 
			 carLicensePlate) {
		 if(!driverLicenseNumber.equals("") || carLicensePlate>0){
			RaceCar tempCar = null;
			RaceDriver tempDriver=null;
			for(RaceCar car:carsArr){
				if(car!=null && car.getLicensePlate()==carLicensePlate){
					tempCar=car;
					for(RaceDriver driver:driversArr){
						if(driver!=null && driver.getLicenseNumber().equals
								(driverLicenseNumber)){
							tempDriver=driver;
						}
					}
				}
			}

			if(tempCar!=null && tempDriver!= null){
				if(tempCar.addRaceDriver(tempDriver)){
					if(tempDriver.addRaceCar(tempCar)){
						return true;
					}
				}
			}
		}
		 return false;
	 }

حاولت اضيفه لكن ما عرفت كيف :(

اذا بتقدر انت او اي الاخوة يساعدني

بارك الله فيكم جميعا

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#7

اخي الكريم

الملف مرفق وفيه الكود كامل لجميع الكلاسات

يا ريت اذا بتقدر ترشدني للمكان الصحيح

بارك الله فيك وبالجميع

Formulla.zip

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#8

السلام عليكم

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

انا جربت اضفت الكود هذا:

				driversArr.car.getRaces();
				driversArr.getTotalScore();
				driversArr.car.setRaces(driversArr.car.totalRaces);
				driversArr.setTotalScore(driversArr.totalScore);
				driversArr.car.performanceRate=driversArr.car.totalRaces/driversArr.totalScore;

ما بعرف اذا كان هذا صحيح، واذا كان صحيح وين لازم اضيفه ؟

يا ريت حد يساعدني بآخر شي، بارك الله فيكم سلف

السلام عليكم

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#9

ابقي التعريف كما هو

وانقل الجزء الباقي إلى آخر الدالة setDriver

وبإذن الله تحل المشكلة

تحياتي

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

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

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

728x90.png

#10

السلام عليكم

بارك الله فيك اخي

لكني بصراحة ما الجزء الثاني من كلامك مليح

الدالة setDriver هي هذي:

	public void setDriver(RaceDriver driver2){
		this.driver=driver2;

	}

أي جزء ثاني اللي انقله الها ؟

تقصد تكون الدالة هيك:

	public void setDriver(RaceDriver driver2){
		this.driver=driver2;
		performanceRate=driver.totalScore/totalRaces;
	}

تقصد هذا اخي :

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#11

بالضبط

هل عمل البرنامج؟؟؟

تحياتي

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

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

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

728x90.png

#12

السلام عليكم

للأسف اخي ما اشتغل البرنامج

يطلعلي نفس الخطأ:

Exception in thread "main" java.lang.NullPointerException

at RaceCar.<init>(RaceCar.java:8)

at SysF1.addCarToArray(SysF1.java:131)

at MainClass.main(MainClass.java:59)

السطر 8 هو التعريف:

protected double performanceRate=driver.totalScore/totalRaces;

السطر 131 هو السطر الثاني:

					carsArr[current_Length_Car_Array]=new RaceCar(licensePlate,
							year,manufacturer, model,colour,numDoors,topSpeed, totalRaces);

أي:

year,manufacturer, model,colour,numDoors,topSpeed, totalRaces);

وسطر 58 - 61 من MainClass:

		     else if (command.equals("addRaceCarToArray")){
		    	   sys.addCarToArray(input.nextInt(),input.nextInt(),input.next(),input.next(),	   
		    			            new Color(input.nextInt(),input.nextInt(),input.nextInt()),
		    			            input.nextInt(),input.nextDouble(),input.nextInt());

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#13

كما قال لك أخي علاء ، هذا السطر :

protected double performanceRate=driver.totalScore/totalRaces;

يصبح :

protected double performanceRate;

أما الجزء المحذوف فيكون داخل الدالة setDriver ..

سبحان الله وبحمده ... سبحان الله العظيم

#14

السلام عليكم

كمان جربته اخي والمشكلة مستمرة،عملت هيك التعريف:

protected double performanceRate;

والدالة عملتها هيك:

	public void setDriver(RaceDriver driver){
		this.driver=driver;
		performanceRate=driver.totalScore/totalRaces;
	}

هذا الخطأ اللي ظهرلي:

Exception in thread "main" java.lang.NullPointerException

at SysF1.getSortedRaceCars(SysF1.java:83)

at MainClass.main(MainClass.java:104)

هذي الاسطر82 - 83 :

if((carsArr[current_Length_Car_Array]!=null)&&(carsArr[current_Length_Car_Array].performanceRate>
					carsArr[current_Length_Car_Array+1].performanceRate)){

وهذا السطر 104 في MainClass:

  	 sys.getSortedRaceCars();

تم تعديل هذه المشاركة بواسطة حامي الحمى في 17 أبريل 2009 في 22:40

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#15

أخي المشكلة الأولى حلت

لكن لديك نفس المشكلة في المكان الجديد

ولتحلها غير السطرين السابقين كالتالي

if((carsArr[current_Length_Car_Array]!=null&&carsArr[current_Length_Car_Array+1]!=null)&&(carsArr[current_Length_Car_Array].performanceRate>
carsArr[current_Length_Car_Array+1].performanceRate)){

لم أطلع على الكود ولا أعرف منطقية ذلك

لكن كل ما هناك أن الكائن في المكان current_Length_Car_Array+1 يساوي null لهذا تحصل على الخطأ nullPointerException

تحياتي

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

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

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

728x90.png

#16

السلام عليكم

بارك الله فيك أخي

لكن هذا الخطأ كان يظهرلي من قبل، يعني قبل ما اضيف شي للدالة getDriver

والآن حاولت الاقي حل للشي اللي ذكرته حضرتك لكني للأسف ما نجحت :(

يا ريت اذا بتتكرك حضرتك او احد الأخوة اللي عندهم دراية في الجافا ويساعدني بهذا البرنامج

جزيتم خيرا جميعا اخواني

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#17

السلام عليكم

بارك الله فيك اخي الكريم

لاقيت الحل، وهو فعلا مثل ما تفضلت معالجة current_Length_Car_Array+1 واضفت كمان شرط للدالة والبرنامج اشتغل تمام

ربنا يجزيكم الخير، واسف على ازعاجكم

السلام عليكم :)

تعب الجسد

ونعيم الروح

جسد يمشي فوق الأرض

وروح ترفرف حول العرش

#18

الحمد لله

أي شيء نحن بالخدمة

تحياتي

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

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

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

728x90.png

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