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

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

بدأه مبتدى بايثون في 25 نوفمبر 2014 · 8 رد · 7,024 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

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

 

الكود

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 و طبقت عليه الدالة السابقة لكن لم أستطع عكس الناتج .

#2
	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
#3
العيافـي كتب:
	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

 

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

#4

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

ﺍﻟﻜﻮﺩ ﺍﻟﺴﺎﺑﻖ

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++ في 3 ديسمبر 2014 في 00:15

‎لا تيأسن إذا كبوتم مرة ** إن النجاح حليف كل مثابر‎

 

Import AnyCodeYouLearned Project = findNewProjecthasProject = Truewhile (!dead&&hasProject) { codeingisDone = try_Codeif (isDone)  Project = findNewProjectelse learn_code
#5

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

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));



}       
 }   
}

تم تعديل هذه المشاركة بواسطة مبتدى بايثون في 4 ديسمبر 2014 في 10:51

#6

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

 

انظر الطريقة التالية وهي العودية 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


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

الأنفال ۳۳                                  
 

#7

اخي الطريقة سهلة كل ما عليك انك تنشئ 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
#8

كما يقال في المثل الانجليزي “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 في 19 ديسمبر 2014 في 17:06

1

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