• 0
مبتدى بايثون

عكس رقم في جافا

سؤال

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

 

لدي الكود التالي حاولت أن أعكس الناتج عند الطباعة بحيث يكون العدد يطبع بالعكس و لكن لم أستطع

 

الكود

public class JavaApplication1 {public static void main ( String[] args ) {int a =51;int x=2;int y ;for (;a>=10;) {y=a+x; a=a-a/2; a=a;  System.out.print(y);}        }   }

أستخدمت الدوال التالية لكن لم أستطع عكس ناتج الكود السابق

public static int RR (int n)     {       n=0;       int reverse = 0;        while( n != 0 )      {          reverse = reverse * 10;          reverse = reverse + n%10;          n = n/10;      }           System.out.print(reverse);         return reverse;   } 

و

     public static String R(String arg) {	String tmp = null;	if (arg.length() == 1)	{		return arg;	}		else	{			String lastChar = arg.substring(arg.length()-1,arg.length());				String remainingString = arg.substring(0, arg.length() -1);		tmp = lastChar + R(remainingString);		return tmp;					}  }

و أستخدمت غيرها من الدوال أيضاً حولت الناتج من int إلى String و طبقت عليه الدالة السابقة لكن لم أستطع عكس الناتج .

 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

8 إجابة على هذا السؤال .

  • 0

public static void main(String[] args) {

System.out.println(reverseNumbers("123456789")); // output = 987654321

}

public static String reverse(final String str) {

if (str == null) {

return null;

}

return new StringBuilder(str).reverse().toString();

}

public static boolean isNotEmpty(final CharSequence cs) {

return !isEmpty(cs);

}

public static boolean isEmpty(final CharSequence cs) {

return cs == null || cs.length() == 0;

}

public static String reverseNumbers(String str) {

if (isNotEmpty(str)) {

StringBuffer sb = new StringBuffer(str);

java.util.regex.Pattern p = java.util.regex.Pattern.compile("\\d+");

java.util.regex.Matcher m = p.matcher(str);

int index = 0;

while (m.find()) {

String numberStr = m.group();

String reversedNumberStr = reverse(numberStr);

index = sb.indexOf(numberStr, index);

int numberLength = numberStr.length();

int endIndex = index + numberLength;

sb.replace(index, endIndex, reversedNumberStr);

index = endIndex;

}

return sb.toString();

}

return str;

}

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
	public static void main(String[] args) {		System.out.println(reverseNumbers("123456789")); // output = 987654321	}	public static String reverse(final String str) {		if (str == null) {			return null;		}		return new StringBuilder(str).reverse().toString();	}	public static boolean isNotEmpty(final CharSequence cs) {		return !isEmpty(cs);	}	public static boolean isEmpty(final CharSequence cs) {		return cs == null || cs.length() == 0;	}	public static String reverseNumbers(String str) {		if (isNotEmpty(str)) {			StringBuffer sb = new StringBuffer(str);			java.util.regex.Pattern p = java.util.regex.Pattern.compile("\\d+");			java.util.regex.Matcher m = p.matcher(str);			int index = 0;			while (m.find()) {				String numberStr = m.group();				String reversedNumberStr = reverse(numberStr);				index = sb.indexOf(numberStr, index);				int numberLength = numberStr.length();				int endIndex = index + numberLength;				sb.replace(index, endIndex, reversedNumberStr);				index = endIndex;			}			return sb.toString();		}		return str;	}

 

 

شكراً لك , لكن الكود لا يظهر النتيجة المطلوبة مع المثال الخاص بي لأن المثال الخاص بي يحتوي على while

 

هل يمكن أستخدام مصفوفة لتخزين ناتج عملية التكرر ثم أستخدم هذه المصفوفة مع الدالة السابقة لعكس الناتج؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ﺃﺳﺘﺨﺪﻣﺖ ﺍﻟﺪﻭﺍﻝ ﺍﻟﺘﺎﻟﻴﺔ ﻟﻜﻦ ﻟﻢ ﺃﺳﺘﻄﻊ ﻋﻜﺲ ﻧﺎﺗﺞ

ﺍﻟﻜﻮﺩ ﺍﻟﺴﺎﺑﻖ

public static int RR (int n)     {       //** n=0;       int reverse = 0;      while( n != 0 )      {          reverse = reverse * 10;          reverse = reverse + n%10;          n = n/10;      }           //System.out.**print(reverse);         return reverse;   }
أخي دالتك هذه صحيحة فقط أحذف الأسطر التي حددتها لك واطبع الناتج من الدالة main

System.out.println(RR(935));
تم تعديل بواسطه Hisawa++
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكراً لك لكن المشكلة هي أنني لا أريد عكس رقم عن طريق جملة الطباعة بهذا الشكل

System.out.println(RR(935));

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

public class JavaApplication1 {public static void main ( String[] args ) {int a =51;int x=2;int y ;for (;a>=10;) {y=a+x; a=a-a/2; a=a;  System.out.print(y);}        }   }

أريد أن أعكس الرقم النهائي لعملية التكرار مثلاً أذا كان المرة الأولى لتكرار كانت قيمة y = 0  , و المرة الثانية كانت قيمة y =1  و المرة الثالثة كانت قيمة y =2 و في كل مرة أقوم بطباعة قيمية y فأصبح الناتج الظاهر على الشاشة مثلاً (012) أنا أريد عكس هذا الناتج إلى (210) لكن المشكلة هي عندما أستخدم أي دالة سابقة فهي تأخذ آخر قيمة لـ y مثلاً 2 لذلك عند تنفيذ الدالة بهذا الشكل في لأن تعكس الرقم

int a =51;int x=2;int y ;for (;a>=10;) {y=a+x; a=a-a/2; a=a; System.out.print(RR(y));}        }   }
تم تعديل بواسطه مبتدى بايثون
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

استخدم المكدس وهو من يساعدك

 

انظر الطريقة التالية وهي العودية recursive

// test.c#include <stdio.h>void divide(int x,int a);int main(){    int a = 51;    int x = 2;    divide(x, a);        return 0;}void divide(int x,int a){    int y = 0;    if( a >= 10)    {        y = a + x ;        a = a - a / 2;        divide( x, a);    }        printf( "%d", y);}

هذا الكود بلغة c

 

ويطبع الناتج

 

0152853

 

مع ان 53 هو ناتج اول عملية تتم على المتغير y

 

اظن هذا ماتريده

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي الطريقة سهلة كل ما عليك انك تنشئ String وتنتظر قيمة يدخلها المستخدم وبعد ما يقوم المستخدم بادخال القيمة تقوم تقوم بجلبها عن طريق For وتلف على عناصر الـ String خانة خانة وتسجلها داخل متغير من نوع Char بعد هيك بتحول الــ Char ل integer وبتطبع الناتج هذا المثال يقوم بالمطلوب

 

import java.util.Scanner;/** * * @author Mohamed Hamdan */public class Number {        private String m;        public Number() {        Scanner scan = new Scanner(System.in);        System.out.print("Input the number here : ");        m  = scan.nextLine();        for( int i = m.length(); i > 0; ){            i--;            int x1 = Character.getNumericValue(m.charAt(i));            System.out.print(x1);        }        System.out.println();    }    public static void main(String[] args) {        new Number();    }}
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كما يقال في المثل الانجليزي “Never reinvent the wheel”، بمعنى أنه ليس من الحكمة اهدار الوقت بانشاء دالة هي موجودة في جافا.
استخدم الكلاس StringBuilder لايوجد حاجة لعكس الرقم أو اختراع دالة جديدة، فقط استدعي الدالة insert(int offset, int i) حيث تقوم بإدخال وتخزين الناتج في شكل مصفوفة تبدأ بالموضع رقم 0. في مثالنا هنا حددت موضع تخزين الناتج offset في كل مرة بالموضع 0 في المصفوفة  y.insert(0, (a + x)); بمعنى انه في كل مرة ستقوم الدالة بتحريك القيمة السابقة المخزنة في المصفوفة من موضع 0 إلى 1 وإدخال القيمة الجديدة إلى الموضع 0 وبذلك في كل دورة تكرار سيتم تحريك أو نقل جميع البيانات أو القيم في المصفوفة خطوة واحدة للخلف وتخزين القيمة الجديد في مقدمة المصفوفة. وبعد الخروج من حلقة التكرار يكون لدينا مصفوفة y تحوي جميع القيم مرتبة بطريقة Stack (أخر قيمة مدخلة هي اول قيمة مخرجة في العرض أو الطباعة) .

 

kogktikkp0950ik4g.jpg

 

ملاحظة : الشرح مجرد لتبسيط الطريقة ولكن شكل مصفوفة StringBuilder وطريقة تخزين القيم فيها تختلف بعض الشي عن هذا التفصيل

public class Example {	public static void main(String[] args) {		int a = 51;		int x = 2;		StringBuilder y = new StringBuilder();		for (; a >= 10;) {			y.insert(0, (a + x));			a = a - a / 2;		}		System.out.print(y);	}}----------------------------------------------Output:152853
تم تعديل بواسطه abo_yomna
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .