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

byte class

بدأه ريحانة الاقصى في 8 مارس 2011 · 7 رد · 510 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

لقد قمت بعمل برنامج لضرب عددين من النوع الثنائي باستخدام خوارزمة خاصة (divide and conquer(

jتعتمد على تجزئة العدد الى اجزاء صغيرة حتى يصل الى خانة واحدة وقتها تقوم بعملية الضرب العادية

وكل المشكلة التي واهتني في التعامل مع ال byte class

ظهر لي الخطا التالي الرجاء المساعدة في معرفة سببه

possible loss of precision

found : int

required: byte

الكود في المرفقات

IntegerMultiplication.java

#2

اعتقد انك اسندت ناتج العمليه لمتغير من نوع int والناتج من نوع byte

لم ارى الكود فقط من رساله الخطأ

قد يكون كلامي خطأ جرب ما قلت او انتظر حتى يردو عليك الاخوه

albert_einstein.jpg

Untitled-AE.jpg
#3

هذا الكود بعد التعديل عليه

الان الكود يعمل ولكن النتيجة غير سليمة

يمكنك مراجعة الخوارزمية التى تستخدمها

/**
* @(#)IntegerMultiplication.java
*
*
* @author :alaa hamda
* @version 1.00 2011/3/8
*/


public class IntegerMultiplication {

   public static void main(String[]args){
   	int a = 110;
   	int b = 100;

   	int result = Multiplication(a,b);
	System.out.println(result);
   }
   //to find the max digit between this two number
   public static int max(int number1,int number2)
   {   
   	int xx = new Integer(number1);
  	//int x = xx.intValue();
  	int yy = new Integer(number2);
  	//int y = yy.intValue();

   	String s1 = String.valueOf(xx);
   	String s2 = String.valueOf(yy);

   	if(s1.length() > s2.length())
         return s1.length();
   	else
 	     return s2.length();

   }

   public static int leftMost(int  x){
 	int xx = new Integer(x);

    	String s1 = String.valueOf(xx);

    	String s2 = s1.substring(0, s1.length() / 2);
    	Integer xl = Integer.parseInt(s2);
    	return xl;

   }

   public static int rightMost(int x){
 	int xx = new Integer(x);

    	String s1 = String.valueOf(xx);

    	String s2 = s1.substring((s1.length()/2 + 1));

    	Integer xl = Integer.parseInt(s2);
    	return xl;

   }


   public static int Multiplication(int x,int y) {
   	int n;  
   	int  xl,xr,yl,yr;
   	int p1,p2,p3;

   	n = max(x,y);
   	if( n == 1){ 
   		return x * y;
   	}else{
   		xl=leftMost(x);
   		xr=rightMost(x); 
   		yl=leftMost(y);
   		yr=rightMost(y);

   		p1 = Multiplication(xl,yl);
   		p2 = Multiplication(xr,yr) ;
   		p3 = Multiplication(xl+xr,yl+yr);

   		return ((2 ^ n * p1) + 2 ^ (n/2) * (p3-p1-p2) + p2); 
   	} 

	}
}

بالتوفيق

تم تعديل هذه المشاركة بواسطة MOHAMED FATHEI في 9 مارس 2011 في 17:21


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#4

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

Exception in thread "main" java.lang.NumberFormatException: For input string: ""

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

at java.lang.Integer.parseInt(Integer.java:470)

at java.lang.Integer.parseInt(Integer.java:499)

at IntegerMultiplication.rightMost(IntegerMultiplication.java:56)

at IntegerMultiplication.Multiplication(IntegerMultiplication.java:72)

at IntegerMultiplication.main(IntegerMultiplication.java:17)

اضافة الى انني اريد اظهار النتيجة بال Binery

#5

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

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

ان اردتى انا فى الخدمة

تحياتى


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#6
MOHAMED FATHEI كتب:

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

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

ان اردتى انا فى الخدمة

تحياتى

من دون استخدام هاي الخوارزمية؟؟؟

للاسف البرنامج المطلوب هو عمل برمجة لخوارزمية العالم غاوس يعني الطريقة المهم وليس االناتج

#7

دائماً اعرض الشيفرة للقارئين وضعيها في المرفقات معاً

تحياتي

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

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

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

728x90.png

#8

للأسف لا أعرف عن غاوس شيئا

هذه الشفرة لطباعة الارقام بالطريقة الثنائية binary system

/**
*
* @author oracle_java
*/
public class NumberSystem {

	public void printAsBinaryNumber(long decimal) {

    	try {

        	char chs[] = {'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'};
        	int remainder = 0;
        	int index = 31;

        	do {
            	remainder = (int) decimal % 2;
            	decimal = decimal / 2;
            	chs[index--] = (char) (remainder + '0');
        	} while (decimal > 0);

        	System.out.println(String.valueOf(chs));

    	} catch (Exception e) {
        	System.err.println(e.getMessage());
        	e.printStackTrace();
    	}

	}

	public static void main(String[] args) {

    	NumberSystem nsys = new NumberSystem();
    	nsys.printAsBinaryNumber(423633729);

	}
}

ربما تستفيد منها فى برنامجك

تحياتى

تم تعديل هذه المشاركة بواسطة MOHAMED FATHEI في 10 مارس 2011 في 14:02


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

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