بیایید با یکی از رویکردهای وارد کردن داده از جریان استاندارد از طریق کلاس بپردازیم java.util.Scanner. بیایید این کار را به عنوان مثال یک کار ساده از یک سایت بسیار مفید e-olimp.com انجام دهیم
یک وظیفه
یک عدد واحد از جریان استاندارد وارد کنید. با فرض اینکه این یک عدد صحیح دو رقمی مثبت است، هر یک از ارقام آن را به طور جداگانه (با فاصله از هم جدا) در خروجی استاندارد چاپ کنید. ترتیب اعداد نباید تغییر کند.
تست ها
هیچ مورد خاصی در الگوریتم در نظر گرفته نشده است. ما سه آزمایش انجام می دهیم - کوچکترین عدد در محدوده مجاز، بزرگترین و مقداری از وسط محدوده.
ورود | خروجی |
10 | 1 0 |
99 | 9 9 |
54 | 5 4 |
راه حل
بیایید از کلاس استفاده کنیم java.util.Scanner،برای وارد کردن داده ها در فرمت عدد صحیح و هر دو عدد آن را محاسبه می کنیم.
چاپ ارقام یک عدد صحیح دو رقمی
جاوا
class Main( public void main (String args) java.lang.Exception (java.util.Scanner i = new java.util.Scanner(System.in)؛ int n = i.nextInt() را پرتاب می کند. System.out. println(n / 10 + " " + n % 10); ))
classMain( عمومی استاتیک void main (String args) جاوا را پرتاب می کند. زبان استثنا( جاوا استفاده کنید. اسکنر i = جاوا جدید. استفاده کنید. اسکنر (System.in)؛ int n = i. nextInt(); سیستم. بیرون . println (n / 10 + " " + n % 10 ) ; |
توضیحات
- توصیف یک متغیر مننوع java.util.Scannerو بلافاصله مقدار یک شی جدید از این کلاس را به آن اختصاص دهید. سازنده یک شی ایجاد می کند اسکنریک از ورودی استاندارد. آن ها منروبنا می شود جریان استانداردورودی این به ما امکان می دهد به جای استفاده از روش، یک عدد صحیح را بخوانیم خواندن() توسط یک بایت.
- با استفاده از روش nextInt() دنباله ای از ارقام را بخوانید و آن را به یک عدد صحیح تبدیل کنید. عدد در متغیر n ذخیره می شود.
- n/ 10 - تعداد ده ها در عدد. ده ها ده برابر کمتر از خود عدد خواهند بود. تقسیم عدد صحیح انجام می شود - تقسیم عدد صحیح.
- n% 10 - محاسبه باقی مانده تقسیم بر ده - تعداد واحدها - بیشترین رقم سمت راستشماره.
- n/ 10 + » » + n% 10 - یک خط یک فاصله بین دو عدد صحیح وارد کنید. در این مورد، اعداد نیز به یک نمایش رشته تبدیل می شوند و هر سه رشته با هم ادغام می شوند - به نام الحاق رشته. این نحوه عملکرد "+" با داده های رشته است.
افزایش سرعت I/O
با تمام راحتی این رویکرد، نسبتاً کند است و گاهی اوقات وظایف به موقع انجام نمی شود. می توانید با استفاده از StreamTokenizer و PrintWriter سرعت کار را به میزان قابل توجهی افزایش دهید.
این مقدار کد را افزایش می دهد، اما در زمان صرفه جویی می کند.
شتاب I/O
جاوا
واردات java.io.*؛ واردات java.util.*; class Main ( Static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)))؛ Static PrintWriter out = New PrintWriter(System.out); static int nextInt() IOException (in.nextToken) را پرتاب می کند. (int)in.nval; ) خالی استاتیک عمومی main(string args) java.lang.Exception را پرتاب می کند ( int n = nextInt(); out.println(n / 10 + " " + n % 10); out.flush( ))))
واردات جاوا io *؛ واردات جاوا استفاده کنید. *؛ classMain( StreamTokenizer static in = StreamTokenizer جدید (New BufferedReader (InputStreamReader جدید (System. in)) ); static PrintWriter out = PrintWriter جدید (System . out ) ; static int nextInt() IOException( |
تحصیل برای "توسعه دهنده بازی" + استخدام
اپراتورها در جاوا
برای نشان دادن عملیات جمع، تفریق، ضرب و تقسیم در زبان جاوامرسوم عملگرهای حسابی + - * /.
عملگر / اگر هر دو آرگومان آن اعداد صحیح باشند، تقسیم عدد صحیح را نشان می دهد. در غیر این صورت، این عملگر تقسیم ممیز شناور را نشان می دهد. باقیمانده تقسیم اعداد صحیح (یعنی تابع mod) با نماد ٪ نشان داده می شود.
برای مثال، 15/2 برابر با 7، 15% 2 برابر با 1 و 15 است. 0/2 برابر با 7 است. پنج
توجه داشته باشید که تقسیم عدد صحیح بر 0 باعث تحریک می شود وضعیت استثنایی، در حالی که نتیجه تقسیم بر 0 اعداد ممیز شناور بی نهایت یا NaN است.
برای مقداردهی اولیه متغیرها می توان از عملگرهای حسابی استفاده کرد.
int n = 5;
int a = 2 *n // مقدار متغیر a 10 است.
استفاده از عملگرهای محاسباتی باینری مخفف در عملگرهای انتساب راحت است.
مثلا اپراتور
x + = 4;
معادل اپراتور است
x = x + 4;
(عملگرهای تخصیص اختصاری با اضافه کردن یک نماد عملگر حسابی مانند * یا % قبل از نماد = مانند *= یا %= تشکیل میشوند.)
یکی از اهداف بیان شده زبان جاوا استقلال ماشین است.
محاسبات باید منجر به همان نتیجه، صرف نظر از اینکه کدام ماشین مجازی آنها را اجرا می کند. برای محاسبات حسابیبیش از اعداد ممیز شناور، این یک کار غیرمنتظره دشوار بود. دوبل تایپ کنیداز 64 بیت برای ذخیره مقادیر عددی استفاده می کند، اما برخی از پردازنده ها از ثبات های ممیز شناور 80 بیتی استفاده می کنند. این رجیسترها دقت بیشتری را در مراحل میانی محاسبه ارائه می دهند. عبارت زیر را به عنوان مثال در نظر بگیرید:
دو برابر w = x * y / z;
بسیاری از پردازنده ها توسط اینتلعبارت x * y را محاسبه کنید و این نتیجه میانی را در یک ثبات 80 بیتی ذخیره کنید، سپس آن را بر مقدار متغیر z تقسیم کنید و در آخر پاسخ را به 64 بیت گرد کنید. بنابراین می توانید دقت محاسبات را بهبود بخشید و از سرریز جلوگیری کنید. با این حال، اگر در تمام محاسبات از یک پردازنده 64 بیتی استفاده شود، این نتیجه ممکن است متفاوت باشد.
به همین دلیل در توضیحات اصلی مجازی ماشین های جاوامشخص شد که تمامی محاسبات میانی باید گرد شوند. این باعث خشم جامعه کامپیوتری شد. سرریز می تواند نه تنها باعث محاسبات گرد شود. آنها در واقع کندتر از محاسبات دقیق تر هستند زیرا عملیات گرد کردن طول می کشد زمان مشخص. در نتیجه، طراحان زبان جاوا نظر خود را تغییر دادند و به دنبال حل تعارض بین عملکرد بهینه و تکرارپذیری عالی نتایج بودند.
توسط توسعه دهندگان پیش فرض ماشین مجازیاکنون اجازه می دهد تا از دقت گسترده ای در محاسبات میانی استفاده شود. با این حال، روشهایی که با کلمه کلیدی strictfp مشخص شدهاند، باید از عملیات ممیز شناور دقیق استفاده کنند تا از نتایج قابل تکرار اطمینان حاصل شود. به عنوان مثال، روش اصلی را می توان با برچسب کلمه کلیدی مطابق شکل زیر نشان داد:
public static strictfp void main (Args رشته ای)
در این حالت، تمام دستورات داخل متد اصلی، عملیات دقیقی را روی اعداد ممیز شناور انجام خواهند داد.
جزئیات این عملیات ارتباط نزدیکی با ویژگی های پردازنده های اینتل دارد. بهطور پیشفرض، نتایج میانی میتوانند از نمایی توسعهیافته استفاده کنند، اما نه از مانتیسای توسعهیافته. (تراشههای اینتل از گرد کردن مانتیسا بدون از دست دادن عملکرد پشتیبانی میکنند.) بنابراین، تنها تفاوت بین محاسبات پیشفرض و دقیق این است که محاسبات دقیق ممکن است سرریز شوند در حالی که محاسبات پیشفرض اینطور نیستند.
اگر هنگام خواندن این یادداشت چشمانتان کم نور شد، نگران نباشید. برای اکثر برنامه نویسان این سوال کاملا بی ربط است. سرریز در محاسبات ممیز شناور در بیشتر موارد اتفاق نمی افتد. در این کتاب ما استفاده نخواهیم کرد کلمه کلیدی strictfp.
عملگرهای افزایش و کاهش
البته برنامه نویسان می دانند که یکی از رایج ترین عملیات روی متغیرهای عددی جمع یا تفریق یک متغیر است. جاوا مانند C و C++ دارای عملگرهای افزایشی و کاهشی است: عملگر x++ یک به مقدار فعلی متغیر x اضافه میکند و عملگر x-- یکی از آن کم میکند.
مثلا کد
int n = 12;
n++;
مقدار متغیر n را برابر با 13 می کند.
از آنجایی که این عملگرها مقدار یک متغیر را تغییر می دهند، نمی توان آنها را روی خود اعداد اعمال کرد. به عنوان مثال، عملگر 4++ نامعتبر است.
دو نوع از این اپراتورها وجود دارد. شکل فوق فرم "postfix" عملگر را نشان می دهد که در آن نمادهای عملگر بعد از عملوند قرار می گیرند. همچنین یک فرم "پیشوند" وجود دارد - ++n.
هر دوی این عملگرها مقدار متغیر را یک بار افزایش می دهند. تفاوت بین آنها تنها زمانی آشکار می شود که این عملگرها در داخل عبارات استفاده شوند. فرم پیشوند عملگر افزایش ابتدا یک به مقدار متغیر اضافه می کند، در حالی که فرم پسوند از مقدار قدیمی آن متغیر استفاده می کند.
int m = 7;
int n = 7;
int a = 2 * ++m; // اکنون مقدار a 16 و m برابر 8 است.
int b = 2*n++; // اکنون b 14 و n برابر 8 است.
(از آنجایی که این عملگر ++ بود که نام زبان ++ را به زبان C++ داد، این دلیل اولین شوخی در مورد آن بود. مخالفان اشاره می کنند که حتی نام این زبان دارای یک خطا است: "از جمله موارد دیگر، این زبان باید ++C نامیده شود، زیرا ما می خواهیم از این زبان فقط پس از بهبود استفاده کنیم.")
اکثر عملیات در انواع ابتداییبا روش ها انجام نمی شود، بلکه با شخصیت های خاصتماس گرفت علامت عملیات.
عملیات واگذاری
وظیفه متغیر ارزشثابت، متغیر یا عبارت دیگری (متغیرها و/یا ثابت هایی که با علائم عملگر از هم جدا شده اند) نامیده می شود عملیات واگذاریو با علامت " = "، به عنوان مثال: x = 3 ; y = x; z = x؛ در جاوا، می توان از عملگر انتساب چندین بار در یک عبارت استفاده کرد، به عنوان مثال: x1 = x2 = x3 = 0 ؛ این عملیات از از راست به چپ، یعنی ابتدا به متغیر x3 مقدار 0، سپس x2 به مقدار x3 (0) و در نهایت x1 به مقدار x2 (0) اختصاص داده می شود. : یگانه(یونری) علائم عملیات با یک آرگومان و دودویی(دودویی) با دو آرگومان.عملیات Unary
جاوا عملیات Unary زیر را تعریف می کند:- unary منهای "-" - علامت یک عدد یا عبارت را به مخالف تغییر می دهد.
- unary plus " + " - هیچ عملیاتی را روی یک عدد یا عبارت انجام نمی دهد.
- مکمل بیتی "~" (فقط برای اعداد صحیح) - همه بیت های فیلد عدد را معکوس می کند (0 به 1 و 1 به 0 تغییر می کند).
- افزایش "++" (فقط برای اعداد صحیح) - مقدار متغیر را 1 افزایش می دهد.
- کاهش "-" (فقط برای اعداد صحیح) - مقدار متغیر را 1 کاهش می دهد.
عملیات باینری حسابی
جاوا موارد زیر را تعریف می کند عملیات باینری حسابی:- اضافه کردن "+"؛
- منها کردن "-"؛
- ضرب " * "؛
- تقسیم "/"؛
- محاسبه باقیمانده تقسیم اعداد صحیح " % " (باقی مانده تقسیم عدد اول بر دوم را برمی گرداند و نتیجه همان علامت سود سهام خواهد بود) ، به عنوان مثال ، نتیجه عملیات 5٪ 3 می شود 2 و نتیجه عملیات (-7) %(-4) برابر با -3 خواهد بود. که در عملیات جاواهمچنین می تواند برای متغیرهای واقعی (نوع float یا double) استفاده شود.
عملیات بیتی
- عملیات بیتی نسخه اصلی را در نظر می گیرد مقادیر عددیبه عنوان فیلدهای بیت و اعمال زیر را روی آنها انجام دهید:
- تنظیم ضربان به منموقعیت -امین فیلد نتیجه 1 است اگر هر دو بیت داخل باشند من-ام موقعیت عملوندها برابر با 1 یا 0 در غیر این صورت بیتی و (" & ") است.
- تنظیم ضربان به منموقعیت -امین فیلد نتیجه 1 است اگر حداقل یک بیت در آن باشد منموقعیت -امین عملوندها 1 یا 0 است در غیر این صورت - به صورت بیتی OR (" | ");
- تنظیم ضربان به منموقعیت -امین فیلد نتیجه 1 است اگر بیت ها وارد شوند من-ام موقعیت عملوندها با یکدیگر برابر نیستند، یا در غیر این صورت با 0 برابر نیستند - انحصاری بیتی OR (" ^ ");
- به سمت چپ بیت های میدان عملوند اول با تعداد بیت های تعیین شده توسط عملوند دوم (بیت علامت عدد در این مورد تغییر نمی کند) - با در نظر گرفتن علامت به سمت چپ تغییر می کند. "<< ";
- جابجایی به سمت راست بیت های فیلد عملوند اول با تعداد بیت های تعیین شده توسط عملوند دوم (بیت علامت عدد در این مورد تغییر نمی کند) - با در نظر گرفتن علامت به سمت راست حرکت کنید. " >> ";
- شیفت به سمت راست بیت های فیلد عملوند اول با تعداد بیت های تعیین شده توسط عملوند دوم (بیت علامت عدد نیز در این مورد جابه جا می شود) - تغییر بیتی به راست بدون در نظر گرفتن ">>>" امضاء کردن.
به صورت بیتی و
int x = 112 ; int y = 94 ; intz; z=x & y; // z=80: 00000000 00000000 00000000 01010000بیتی OR
int x = 112 ; // x: 00000000 00000000 00000000 01110000 int y = 94 ; // سال: 00000000 00000000 00000000 01011110 intz; z=x | y; // z = 126: 00000000 00000000 00000000 01111110XOR بیتی
int x = 112 ; // x: 00000000 00000000 00000000 01110000 int y = 94 ; // سال: 00000000 00000000 00000000 01011110 intz; z=x^y; // z = 46: 00000000 00000000 00000000 00101110شیفت چپ با علامت
int x = 31 , z; // x: 00000000 00000000 00000000 00011111 z=x<< 2 ; // z = 124: 00000000 00000000 00000000 01111100شیفت به راست با علامت
int x = - 17 , z; z = x >> 2 ; // z = -5: 11111111 11111111 11111111 11111011بدون علامت به راست تغییر دهید
int x = - 17 , z; // x: 11111111 11111111 11111111 11101111 z = x >>> 2 ; // z = 1073741819 // z: 00111111 11111111 11111111 11111011
عملیات ترکیبی
در جاوا برای عملیات حسابی باینری می توانید استفاده کنید ترکیب شدهعلائم عملیات (ترکیب): شناسه عملیات = عبارت این معادل عملیات زیر است: شناسه = عبارت شناسه عملیات مثالها:- عبارت x += b به معنای x = x + b است.
- عبارت x -= b به معنای x = x - b است.
- عبارت x *= b به معنای x = x * b است.
- عبارت x /= b به معنای x = x / b است.
- عبارت x %= b به معنای x = x % b است.
- عبارت x &= b به معنای x = x & b است.
- عبارت x |= b به معنای x = x | ب
- عبارت x ^= b به معنای x = x ^ b است.
- عبارت x<<= b означает x = x << b .
- عبارت x >>= b به معنای x = x >> b است.
- عبارت x >>>= b به معنای x = x >>> b است.
عملیات مقایسه
جاوا عملگرهای مقایسه زیر را تعریف می کند:- " == " (برابر)، " != " (برابر نیست)،
- " > " (بزرگتر از)، " >= " (بزرگتر یا مساوی)،
- " < " (меньше) " <= " (меньше или равно)
عملیات بولی
عملیات بولیبر روی متغیرهای بولی انجام می شود و نتیجه آنها نیز مقداری از نوع است بولی. جاوا عملیات بولی زیر را تعریف می کند:- نفی "!" - جایگزینی false با true یا بالعکس
- عملگر AND "&" - نتیجه فقط در صورتی درست است که هر دو عملوند درست باشند، در غیر این صورت نتیجه نادرست است.
- OR عملیات "|" - نتیجه فقط در صورتی درست است که حداقل یکی از عملوندها درست باشد، در غیر این صورت نتیجه نادرست است.
- عملگر XOR "^" - نتیجه فقط در صورتی درست است که عملوندها با یکدیگر برابر نباشند، در غیر این صورت نتیجه نادرست است.
عملیات مشروط
عملگر شرطی به شکل express-1?expression-2:expression-3 نوشته شده است. این ابتدا عبارت-1 را ارزیابی می کند، که باید یک مقدار بولی ایجاد کند، و سپس، اگر عبارت-1 به درستی ارزیابی شود، عبارت-2 را به عنوان نتیجه عملیات ارزیابی کرده و برمی گرداند، یا (اگر عبارت-1 به غلط ارزیابی شود)، ارزیابی می کند. و عبارت-3 به عنوان نتیجه عملیات برگردانده می شود. نمونه ای از عملیات مشروط: x= n> 1 ? 0:1; به متغیر x اگر n>1 باشد، مقدار 0 اختصاص داده میشود (عبارت n>1 به درستی ارزیابی میشود) یا 1 اگر n≤1 (عبارت n>1 به غلط ارزیابی میشود).تقدم عملیات
عملیات در عبارات از چپ به راست انجام می شود، اما با توجه به اولویت آنها. بنابراین عملیات ضرب در عبارت y = x + z* 5 ; قبل از عمل جمع اجرا خواهد شد زیرا عملیات ضرب اولویت بیشتری نسبت به عمل جمع دارد. اولویت های عملیات (به ترتیب کاهش اولویت) در جاوا در جدول آورده شده است. یکی![](https://i2.wp.com/info.javarush.ru/uploads/images/00/65/20/2015/12/03/168e45.png)
تبدیل نوع و ریخته گری هنگام انجام عملیات
عملیات انتساب و عبارات حسابی می توانند از لفظ، متغیرها و عبارات مختلف استفاده کنند، به عنوان مثال: double y; بایت y = x + 5 ; این مثال متغیر بایت x و لفظی 5 (نوع int) را اضافه می کند و نتیجه را به متغیر دوتایی y اختصاص می دهد. در جاوا، مانند زبان C، تبدیل نوع در ارزیابی عبارات می تواند به صورت خودکار یا با کمک یک عملگر نوع ریخته گری انجام شود. با این حال، قوانین مربوط به نوع ریخته گری تا حدودی با قوانین زبان C متفاوت است و به طور کلی سخت تر از زبان C است. هنگام انجام یک عملیات انتساب، تبدیل نوع به طور خودکار اتفاق می افتد اگر تحول گسترده(تبدیل گسترده) و دو نوع سازگار هستند. دگرگونیهای گستردهتر، تبدیلها هستند بایت® کوتاه® بین المللی® طولانی® شناور® دو برابر. برای گسترش تبدیل، انواع عددی، از جمله عدد صحیح و ممیز شناور، با یکدیگر سازگار هستند. با این حال، انواع عددی با انواع char و boolean سازگار نیستند. نوع char و boolean نیز با یکدیگر سازگار نیستند. زبان جاوا همچنین هنگام ذخیره یک ثابت اعداد صحیح واقعی (که به طور پیشفرض دارای نوع int است) در متغیرهای نوع بایت، کوتاه یا طولانی، تبدیل خودکار نوع را انجام میدهد (اما اگر literal مقداری خارج از محدوده مقادیر معتبر برای در این نوع، یک پیغام خطا ارسال می شود: احتمال از دست دادن دقت). اگر تبدیل در حال باریک شدن باشد (تبدیل باریک)، یعنی تبدیل بایت ¬ کوتاه ¬ کاراکتر ¬ طول ¬ شناور ¬ دو برابر باشد، آنگاه چنین تبدیلی ممکن است منجر به از دست دادن دقت عدد یا تحریف آن شود. بنابراین، تبدیلهای باریک هنگام کامپایل شدن برنامه، یک تشخیص ناسازگاری نوع ایجاد میکند و فایلهای کلاس تولید نمیشوند. چنین پیامی همچنین هنگام تلاش برای تبدیل عبارات نوع بایت یا short به متغیری از نوع char صادر می شود. اگر همچنان نیاز به انجام چنین تبدیل هایی دارید، از عملیات Cast استفاده کنید که فرمت زیر را دارد: نوع تبدیل) معنی، جایی که نوع تبدیلنوع داده شده را که قرار است به آن تبدیل شود را مشخص می کند معنیبه عنوان مثال، در نتیجه اجرای دستورات: byte x = 71 ; نماد کاراکتر = (char ) x; متغیر نماد روی "G" تنظیم می شود. اگر یک مقدار ممیز شناور به یک نوع عدد صحیح اختصاص داده شود، در آن صورت (اگر مقدار ممیز شناور دارای بخش کسری باشد) تبدیل نوع صریح نیز رخ می دهد. کوتاه کردن(قطع) اعداد. بنابراین، در نتیجه اجرای عملگر int x = (int ) 77.85 ; متغیر x مقدار 77 را دریافت می کند. اگر مقدار اختصاص داده شده خارج از محدوده باشد تبدیل نوع ، سپس نتیجه تبدیل، باقیمانده تقسیم مقدار بر مدول محدوده نوع اختصاص داده شده خواهد بود (برای اعداد نوع بایت، مدول محدوده 256، به طور خلاصه - 65536، برای int - 4294967296 خواهد بود. و برای مدت طولانی - 18446744073709551616). به عنوان مثال، در نتیجه اجرای دستور byte x = (byte ) 514 ; متغیر x مقدار 2 را دریافت می کند. هنگام تبدیل اعداد صحیح یا شناور به داده های کاراکتر، تبدیل به یک کاراکتر در صورتی اتفاق می افتد که عدد اصلی بین 0 تا 127 باشد، در غیر این صورت کاراکتر روی "؟" تنظیم می شود. هنگام انجام تبدیلهای حسابی و بیتی، همه مقادیر بایت و کوتاه، و همچنین مقادیر char به int بسط مییابند (در حالی که مقدار عددی کد کاراکتر در محاسبات برای char استفاده میشود) سپس، اگر حداقل یک عملوند از نوع باشد. long، نوع عبارت عدد صحیح به طولانی گسترش می یابد. اگر یکی از عملوندها از نوع float باشد، نوع عبارت کامل به float بسط مییابد و اگر یکی از عملوندها از نوع double باشد، نوع نتیجه دو برابر میشود. بنابراین، اگر متغیرها بایت a, c; ب کوتاه؛ سپس در عبارت a + b * c - 15 L + 1.5F + 1.08 - 10; ابتدا قبل از ارزیابی a + b*c، مقادیر متغیرها به int گسترش مییابد، سپس از آنجایی که ثابت 15 از نوع long است، نتیجه محاسبه به مدت طولانی قبل از تفریق گسترش مییابد. پس از آن، از آنجایی که 1.5 تحت اللفظی از نوع float است، نتیجه ارزیابی a + b*c - 15L قبل از اضافه شدن به این حرف به float گسترش می یابد. قبل از انجام جمع با عدد 1.08، نتیجه محاسبات قبلی به دو برابر افزایش می یابد (زیرا ثابت های واقعی به طور پیش فرض دو برابر می شوند) و در نهایت، قبل از انجام آخرین جمع، لفظ 10 (int به طور پیش فرض) گسترش می یابد. دوبرابر شدن . بنابراین، نتیجه ارزیابی عبارت از نوع double خواهد بود. بسط نوع خودکار (مخصوصاً بسط های کوتاه و بایت به int) می تواند باعث ایجاد خطاهای زمان کامپایل ضعیف شود. به عنوان مثال، در دستورات: بایت x = 30 , y = 5 ; x = x + y; مقدار x و y قبل از انجام جمع به int گسترش مییابد، و سپس هنگام تلاش برای نسبت دادن نتیجه یک محاسبه int به یک متغیر بایت، خطایی ایجاد میشود. برای جلوگیری از این امر، تبدیل نوع صریح باید در عملگر دوم استفاده شود: x = (byte ) (x + y) ; عبارت x + y باید پرانتز شود زیرا تقدم عملیات ریخته گری پرانتز شده از تقدم عملگر جمع بیشتر است. به هر حال، اگر عملگر دوم را به صورت زیر بنویسیم: x += y; سپس هیچ پیام خطایی وجود نخواهد داشت. لینک اول1. عملیات حسابی پایه
جدول زیر عملیات حسابی اساسی مورد استفاده در زبان جاوا را فهرست می کند:
قوانینی را برای کار با عملیات حسابی در نظر بگیرید:
- عبارات از چپ به راست ارزیابی می شوند مگر اینکه پرانتزها اضافه شوند یا برخی از عملگرها اولویت بیشتری داشته باشند.
- عملگرهای *، / و % بر + و - اولویت دارند.
مثال 1. عملیات حسابی روی مقادیر صحیح
برای مثال در این کد متغیرها آو بمعانی مختلفی خواهد داشت:
کلاس عمومی BasicIntMath ( عمومی استاتیک void main(string args) ( int a = 4 + 5 - 2 * 3; int b = 4 + (5 - 2) * 3; System.out.println("a = " + a) ; System.out.println("b = " + b); ) )
نتیجه اجرا:
A = 3 b = 13
- عمل تفریق یکنواخت علامت عملوند واحد خود را تغییر می دهد.
- عملگر جمع unary به سادگی مقدار عملوند خود را برمی گرداند. اصولاً لازم نیست، اما ممکن است.
مثال 2. عملیات واحد جمع و تفریق
کلاس عمومی UnarySignOperation ( عمومی استاتیک void main(string args) ( double a = -6; double b = +6; System.out.println(a); System.out.println(b); ))- هنگامی که یک عملیات تقسیم بر روی یک نوع داده عدد صحیح انجام می شود، نتیجه آن شامل یک جزء کسری نخواهد بود.
مثال 3. تقسیم عدد صحیح
کلاس عمومی IntDivision ( عمومی استاتیک void main(string args) (int a = 16/5; System.out.println(a);))نتیجه اجرای این برنامه:
- عملوندهای حسابی باید از نوع عددی باشند. عملیات حسابی را نمی توان بر روی انواع داده های بولی انجام داد، اما بر روی انواع داده مجاز است کاراکتر، زیرا در جاوا این نوع در اصل نوعی نوع است بین المللی.
مثال 4. عملیات حسابی روی متغیرهای نوع کاراکتر
کلاس عمومی BasicCharMath1 (اصطلاح خالی استاتیک عمومی (رشته آرگ) ( char c = "n"؛ System.out.println(c)؛ System.out.println (c + 1); System.out.println (c / 5) ;))نتیجه اجرا:
N 111 22
مثال 5. عملیات حسابی روی متغیرهای نوع کاراکتر
کلاس عمومی BasicCharMath2 (اصطلاح خالی استاتیک عمومی (Args رشته) ( char c1 = "1"؛ char c2 = "\u0031"؛ char c3 = 49; System.out.println(c1 + c2 + c3); ))نتیجه اجرا:
عملگر مدول با نماد ٪ نشان داده می شود. این عملگر پس از تقسیم عدد اول بر عدد دوم باقیمانده را برمی گرداند. هنگام تقسیم یک عدد صحیح، نتیجه نیز یک عدد صحیح است.
مثال 6. تقسیم مدول
کلاس عمومی DivisionByModule ( عمومی استاتیک void main(string args) (int a = 6 % 5; double b = 6.2 % 5.0; System.out.println(a); System.out.println(b)؛ ) )نتیجه اجرا:
1 1.2000000000000002
2. عملیات محاسباتی مرکب با انتساب
جاوا عملگرهای خاصی دارد که محاسبات را با انتساب ترکیب می کنند. عبارت زیر را در نظر بگیرید:
A = a + 4;
در جاوا این عملیات را می توان به صورت زیر نوشت:
A += 4;
عملیات تخصیص مرکب نه تنها مقدار کد را کاهش می دهد، بلکه امکان تبدیل خودکار را نیز فراهم می کند که عملیات معمولی انجام نمی دهد.