View Full Version : آموزش: مجموعه سوال های مبتدیان
mr.dp+
سه شنبه 17 تیر 1393, 21:30 عصر
من چند ماهیه اینجام و دیدم که خیلی از افراد مبتدی پست های تکراری میزارند و یا سوال های تکراری میپرسند. :متفکر:
تصمیم گرفتم یک تاپیک بسازم که روزانه در حد توانم یکی دو تا سوال به همراه جوابشون بزارم که دوستان زودتر به جواب هایی که میخوان برسند . :خجالت:
به هیچ عنوان در این تاپیک سوال نپرسید
چون اسپم حساب میشه.
Start to learn more :لبخندساده:
mr.dp+
سه شنبه 17 تیر 1393, 21:31 عصر
1- چرا interface سازنده (Constructor) ندارد ؟
زیرا ، سازنده برای حذف مقادیر پیشفرض توسط مقادیر مشخص شده کاربر استفاده میشود.اما در مورد interface همه ی اعضای داده ها (data members or fields) بصورت "Public static final" هستند . یعنی همه ثابت هستند! پس نیازی به از بین بردن مقادیرشان نیست.
cups_of_java
سه شنبه 17 تیر 1393, 23:29 عصر
بیان دقیق تر و ملموس تر اینکه چرا اینترفیس ها سازنده ندارن این هست که اینترفیس ها قابلیت new شدن ندارن. یعنی ازشون شی ساخته نمیشه بنابراین سازنده احتیاج ندارن (براشون معنی نداره)
واسه همین هم هست که اون ها تمام فیلد هاشون static هست.
mr.dp+
چهارشنبه 18 تیر 1393, 00:56 صبح
سلسله مراتب داده
آیتم های داده توسط کامپیوترها از یک سلسله مراتب داده پردازش میشوند که در ساختار بزرگتر و پیچیده تر میشوند همانطور که ما از بیت ها به کاراکتر ها و به فیلدها پیش میریم، و به همین ترتیب. این شکل یک بخش از سلسله مراتب داده ها را نشان میده.
https://photos-1.dropbox.com/t/0/AADuhpa_aSRocNEFee6uvO6okLr88uARvzxy4t7gJpvScg/12/271310976/jpeg/1024x768/3/1404853200/0/2/Data-haierarchy.jpg/hrJfBvzhkf6XcRwHtIugN38hw8qlOQ7egIhirOaa5lc
بیت : کوچکترین آیتم داده در کامپیوتر که میتونه مقدار 0 و یا مقدار 1 رو بگیره.
کاراکتر: این برای مردم خسته کننده است که کار با داده ها در فرم های سطح پایین از بیت ها کار کنند. در عوض، آنها ترجیح میدن که با رقم های دسیمال (0-9) ، حروف (A-Z and a-z) ، و سیمبل های مخصوص ($, @, %, &, *, (, ), –, +, ", :, ? , /) کار بکنند. رقم ها، حرفو و سیمبل های مخصوص همشون کاراکتر هستن. جاوا از کاراکترهای یونیکد (Unicode) استفاده میکند که از دو بایت (byte) تشکیل شده اند.
فیلد: همانطور که کاراکترها از بیت ها تشکیل شده اند، فیلد ها هم از کاراکترها یا بایت ها تشکیل شده اند. یک فیلد گروهی از کاراکتر ها یا بایت ها است. برای مثال، یک فیلد متشکل از حروف بزرگ و کوچیک میتونه برای نمایش نام یک شخص استفاده بشه ، یک فیلد متشکل از ارقام دسیمال میتونه برای نمایش سن فرد استفاده بشه.
رکورد: چند فیلد مرتبط میتونند یک رکورد را تشکیل بدند(پیاده سازی شده به عنوان یک کلاس در جاوا) . در یک سیستم حقوق و دستمزد، برای مثال، رکورد برای یک کارمند ممکن است شامل فیلد های زیر باشد(نوع این فیلد ها همچنین داخل پرانتز نشان داده شده است )
شماره شناسایی کارمند(فقط عدد)
نام (رشته ای از کاراکترها)
آدرس (رشته ای از کاراکترها)
در مثال قبلی ، همه ی فیلدها به همان کارمند تعلق دارند. یک شرکت شاید تعدادی کارمند داشته باشه که هر رکورد صورت حساب برای یکی از آنهاست.
فایل: یک فایل گروهی از رکورد های مرتبط است(به طور کلی، یک فایل حاوی داده های دلخواه در فرمت های دلخواه است). این برای یک سازمان غیر معمولی نیست که تعدای فایل داشته باشه، که برخی حاوی بیلیون ها، یا حتی ترلیون ها کاراکتر از اطلاعات هستند.
mr.dp+
چهارشنبه 18 تیر 1393, 12:47 عصر
Static block
بلوک Static یا استاتیک (ثابت،ایستا) مجموعه ای از دستورات است که قبل اجرا شدن متد اصلی (main method) توسط JVM اجرا خواهد شد.
نکته:
در واقع هر گاه که ما بخوایم یک دستورالعمل یا statement رو قبل از متد اصلی اجرا بکنیم بلوک استاتیک میتونه استفاده بشه.
مثالی از static
class StaticDemo
{
static
{
System.out.println("Hello how are u ?");
}
public static void main(String args[])
{
System.out.println("This is main()");
}
}
Output:
Hello how are u ?
This is main()
چرا بلوک استاتیک قبل از متد اصلی اجرا شود ؟
یک کلاس قبل از اینکه ما شروع به استفاده ازش بکنیم در حافظه بارگذاری میشود و بلوک استاتیک در طول بارگذاری کلاس اجرا میشود. و این دلیلی برای اینه که چرا بلوک استاتیک قبل از متد اصلی اجرا میشود.
یا مثلا میتونیم Splash Screen که قبل از اجرای برخی نرم افزار ها مثلا Eclipse,Netbeans,phoroshop و... میاد را Static فرض کرده و برنامه ای که بعدش میاد رو Class فرض کنیم.
mr.dp+
پنج شنبه 19 تیر 1393, 13:17 عصر
Defference between class method and instance method
Instance method نیازمند یک نمونه از یک Class است که وجود داشته باشه قبل از اینکه بتونیم یک شئ ازش بسازیم. پس یک نمونه از یک کلاس میتونه با استفاده از کلمه کلیدی new ایجاد بشه . بعد اینکه اون شئ ساخته شده در حافظه در مکانی ذخیره میشه. سپس با استفاده از شئ ایجاد شده ، میتونیم به متدهای اون کلاس دسترسی داشته باشیم (البته همانطور که میدونید نمیتونیم به متدهای Private دسترسی داشته باشیم)
درحالی که Class method ( که بصورت static هم هستش )بدون نیاز به ایجاد شئ میتونه صدا زده بشه
شما میتونید به این صورت یک کلاس استاتیک (Class method) را اجرا بکنید
MyObject.staticMethod();//Simply refers to the class's static code
ولی برای اجرای متدهای غیر استاتیک (Instance methods) ، باید اینکارو انجام بدید :
MyObject obj = new MyObject();//Create an instance
obj.nonstaticMethod();//Refer to the instance's class's code
همچنین اضافه میکنم که :
متد های نمونه میتونن به مقادیر نمونه و متدهای نمونه بصورت مستقیم دسترسی داشته باشن.
متدهای نمونه میتونن به مقادیر کلاس و متدهای کلاس دسترسی داشته باشن.
متدهای کلاس میتونن به مقادی کلاس و متدهای کلاس دسترسی مستقیم داشته باشن.
متدهای کلاس نمیتونن به مقادیر نمونه یا متدهای نمونه دسترسی مستقیم داشته باشند و باید از یک شئ ارجاع دهنده استفاده کنند. همچنین ، متدهای کلاس نمیتونن از کلمه کلیدی this استفاده کنند همانطور که نمونه ای برای this برای اشاره وجود نداره.
mr.dp+
شنبه 28 تیر 1393, 14:41 عصر
تفاوت بین JDK و JRE
Java Runtime Environment (JRE) در واقع همان Java Virtual Machine (JVM) است که در آن برنامه های جاوای شما اجرا میشن. همچنین شامل پلاگین هایی برای اجرای applet در مرورگرها نیز میباشد. JDK دارای تمام ویژگی های کیت توسعه نرم افزار برای جاوا شامل JRE ، کامپایلرها و ابزارها (مثل JavaDoc ، و Java Debugger) به ترتیب برای کاربر به منظور توسعه، کامپایل و اجرای برنامه های جاوا میباشد.
mr.dp+
پنج شنبه 02 مرداد 1393, 19:26 عصر
تابع های Override و Overload
Overload کردن متد در جاوا زمانی رخ میده وقتی دو یا متدهای بیشتری در همان کلاس یک اسم داشته باشند، ولی پارامترهاشون مختلف باشه!
از یه طرفی هم ، Override کردن برای حالتی تعریف میشه وقتی یه کلاس فرزند همون کلاس پدر رو دوباره تعریف بکنه!
متدهای Override شده باید همان نام،لیست آرگومان و نوع برگشتی رو داشته باشن.
Override کردن متد شاید دسترسی به متد Override شده رو محدود نکنه.
mr.dp+
چهارشنبه 29 مرداد 1393, 14:12 عصر
تفاوت بین یک رابط و یک کلاس انتزاعی در چیست ؟
جاوا هر دوی رابط ها و کلاس های انتزاعی ایجاد شده را ارائه و پشتیبانی میکند. در هر دو برخی از خصوصیات یا ویژگی های مشترکی پیاده سازی شده است،
اما آنها در ویژگی های زیر متفاوت هستند:
همه ی روشهای1 در یک رابط به طور ضمنی انتزاعی2 هستند.از سوی دیگر، یک کلاس انتزاعی شاید شامل هر دوی توابع انتزاعی و غیر انتزاعی باشد.
یک کلاس شاید یک تعداد از رابط ها3 را پیاده سازی کند، اما فقط یک کلاس انتزاعی را میتواند extend4 کند.
بمراتب برای یک کلاس در پیاده سازی یک رابط ، باید همه ی توابع اعلان شده اش را پیاده سازی کند. با اینکه یک کلاس شاید همه ی توابع اعلان شده از یک کلاس انتزاعی را پیاده سازی نکند.
کلاس های انتزاعی می توانند بدون پیاده سازی بدنه ی متدهای یک رابط از انها استفاده کنند.
متغیرهای اعلان شده5 در یک رابط جاوا بصورت پیشفرض final6 هستند. یک کلاس انتزاعی شاید شامل متغیرهای non-final هم باشد.
اعضای رابط جاوا بصورت پیشفرض public هستند. یک عضو از یک کلاس انتزاعی میتواند شامل هر کدام از private, protected یا public باشد.
یک رابط کاملا انتزاعی است و نمیتواند نمونه سازی شود.یک کلاس انتزاعی7 همچنین نمیتواند نمونه سازی شود ، اما اگر شامل متد main باشد میتواند فراخوانی شود.
Method
Abstract
Interface
برای اطلاعات بیشتر به این لینک مراجعه کنید : http://www.javacoffeebreak.com/faq/faq0048.html
Declared
به مثال ، یک متغیر که بصورت final تعریف شود دیگر قابل تغییر نیست.
Abstract Classes ، کلاس های انتزاعی یا مجرد
mr.dp+
شنبه 01 شهریور 1393, 00:58 صبح
جاوا ارث بری چند گانه (multiple inheritance) را پشتیبانی میکند ؟
نه ، جاوا ارث بری چند گانه را پشتیبانی نمیکند. هر کلاس قادر به extend کردن فقط یک کلاس میباشد، اما قادر به پیاده سازی (Implement) کردن بیش از یک رابط (interfaces) میباشد
mr.dp+
شنبه 01 شهریور 1393, 21:26 عصر
تفاوت بین آرایه و لیست آرایه در چیست ؟
چه وقتی استفاده از لیست آرایه بجای آرایه بهتر است ؟
کلاس های آرایه1 و لیست آرایه2 در ویژگی های زیر متفاوت هستند:
آرایه میتواند شامل داده های اولیه3 و شئ ها4 باشد، در حالی که لیست آرایه فقط شامل شئ ها هستش.
آرایه یک سایز ثابت دارد، در حالی که لیست آرایه داینامیک هستش.
یک لیست آرایه روشها5 و ویژگی های زیادی را ارائه میدهد، مانند addAll , removeAll, iterator , و...
برای یک لیست از انواع داده اولیه3، مجموعه ها6 از autoboxing7 برای کاهش تلاش های برنامه نویسی استفاده میکند. با این حال، این رویکرد آنها را وقتی که روی داده های اولیه با سایز ثابت8 کار میکنند آهسته تر میکند.
Arrays
ArrayList
Primitive data types
Objects
Methods
Collections، میتوانید به این لینک مراجعه کنید : https://en.wikipedia.org/wiki/Collection_%28abstract_data_type%29
برای فهمیدن autoboxing میتوانید به این لینک مراجعه کنید : http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html
Fixed Size، همانطور که میدانید آرایه ها یک سایز ثابت دارند و بصورت دستی این سایز توسط برنامه نویس تعیین میشود.
mah.shahani10
جمعه 19 دی 1393, 18:26 عصر
دو تا سوال داشتم...
اولیش این که چه فرقی بین math.random() و استفاده از java.util.random هستش؟
و اینکه آیا میشه برای اعداد رندوم بازه تعیین کردو یا تعداد دقیق مثلا بگی 100 تا عدد رندوم میخوام؟
ahmad.mo74
جمعه 19 دی 1393, 21:51 عصر
سلام
هیچ فرقی نداره، کدی که توی متد ()random کلاس Math هست :
public static double random() {
return RandomNumberGeneratorHolder.randomNumberGenerator. nextDouble();
}
private static final class RandomNumberGeneratorHolder {
static final Random randomNumberGenerator = new Random();
}
برای تعیین کردن بازه هم میشه اینکارو کرد (مثلا 100 تا عدد رندوم از 1 تا 100) :
public class RandomTest {
static final Random randomGenerator = new Random();
public static void main(String[] args) {
for (int i : nextIntegers(100, 1, 100)) {
System.out.println(i);
}
}
static int[] nextIntegers(int size, int min, int max) {
int bound = max - min + 1;
int[] integers = new int[size];
for (int i = 0; i < size; i++) {
integers[i] = randomGenerator.nextInt(bound) + min;
}
return integers;
}
}
یا اینکه (جاوا 8) :
public class RandomTest {
static final Random randomGenerator = new Random();
public static void main(String[] args) {
randomGenerator.ints(100, 1, 101).forEach(System.out::println);
}
}
aliabbasifard
پنج شنبه 14 خرداد 1394, 21:19 عصر
سلام.خسته نباشید.من یه سوال از قسمت فایل های جاوا داشتم.از کلاس File دو تا شی با نام های مختلف ایجاد میکنیم.و رو هر دو تاش متد File رو پیاده سازی میکنیم.داخل این متد باید یک رشته باشه.حالا از کجا بدونیم این فایلمون یه"فولدره" یا یه فایل دیگه از نوع مختلفه.ایا همه ی فایل هایی که ما از این کلاس میسازیم فولدر هستن؟.در کل ممنون میشم هر اطلاعاتی دارید بهم بدید.
ahmad.mo74
پنج شنبه 14 خرداد 1394, 21:46 عصر
http://www.mkyong.com/tutorials/java-io-tutorials/
aliabbasifard
پنج شنبه 14 خرداد 1394, 22:41 عصر
بعد یه سوال دیگه چرا باید تو این کار بافایل از try و catch استفاده کرد؟ اگه میشه توضیح بدید
ahmad.mo74
جمعه 15 خرداد 1394, 15:23 عصر
http://www.tutorialspoint.com/java/java_exceptions.htm
این لینک رو ببینید، سوالا و ابهاماتی که براتون پیش اومده رفع میشه.
vector1
دوشنبه 26 مرداد 1394, 20:41 عصر
درود استفاده از جاوا برای ساخت سایتهای شرکتی کوچک و متوسط منطقیست یا استفاده در پروژه های بزرگ و خاص مناسب این زبان است؟
Keyone_razi
چهارشنبه 08 مهر 1394, 19:25 عصر
سلام. کلاس هایی که برای جاوا نوشته شده اند چه ویژگی دارند، که توصیه می شه از اونها توی برنامه هامون استفاده کنیم؟ مثلا اگه بخواهیم یه آرایه را درون یه آرایه ی دیگه کپی کنیم می تونیم از یه دستور for استفاده کنیم، در حالی که می بینیم متدهای مختلفی برای کپی کردن در کلاسهای جاوا وجود داره!!!!
محمد فدوی
پنج شنبه 09 مهر 1394, 11:37 صبح
برای کپی کردن یک آرایه نیازی به پیمایش تکتک اعضای اون با حلقهی For نیست. امکانات سطح پایینتر سیستمیای وجود دارن که مستقیما بخشی از حافظه (مثلا یک آرایه) رو کپی میکنن. در جاوا اینکار با متد System.arraycopy در دسترسه. چندتا از روشهایی که میشه باش یه آرایه رو در جاوا کپی کرد:
int[] oneToTen = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int len = oneToTen.length;
// 1:
int[] copy1 = new int[len];
for(int i = 0; i < len; i++) {
copy1[i] = oneToTen[i];
}
// 2:
int[] copy2 = new int[len];
System.arraycopy(oneToTen, 0, copy2, 0, len);
// 3:
int[] copy3 = Arrays.copyOf(oneToTen, len);
// 4:
int[] copy4 = (int[]) oneToTen.clone();
// 5: (Need's Java 8+)
int[] copy5 = IntStream.of(oneToTen).toArray();
و اما توضیحات:
۱. مبتدیانهترین روشی که میشه باش یه آرایه رو کپی کرد.
۲. خیلی سریعتر از روش ۱ به خاطر اینکه کپی کردن آرایه در سطح پایینتری انجام میشه و علاوهبراین متد System.arraycopy بصورت محلی (Native) پیادهسازی شده.
۳. در حقیقت از همون روش ۲ استفاده میکنه. ولی خب سادهتر و کوتاهتر و خواناتره.
۴. اینم با احتمالا از ابزارهای سطحپایینی برای کلونکردن شیء استفاده میکنه ولی حدس میزنم از System.arraycopy سریعتر نباشه. البته چون متد clone ممکنه نتایج پیشبینی نشدهای داشته باشه خصوصا در مورد کلاسهایی که واسط Cloneable رو پیادهسازی نکردن، استفاده ازش رو پیشنهاد نمیکنم.
۵. (نیاز به جاوا ۸ داره) احتمالا از همهی روشهای بالا کندتره. ولی استفادهاز Streamها در جاوا قابلیتهای جدیدی رو به ما میده که الان جای صحبت در مورد اونها نیست و البته در حجمهای خیلی بزرگ داده Streamها میتونن با پردازش موازی و پردازشهای Lazy خیلی سریعتر هم بشن.
در نهایت برای برنامههای عادی پیشنهاد میکنم از Arrays.copyOf استفاده کنی.
Keyone_razi
پنج شنبه 09 مهر 1394, 12:07 عصر
ممنون، منظورم صرفا برای کپی کردن یه آرایه نیست، کلا می گم، یعنی من خودم بخوام یه برنامه ای بنویسم که به همون امکانات سطح پایین تر دسترسی داشته باشم، باید چیکار کنم؟ باید به یه زبان برنامه نویسی دیگه این کارو انجام داد؟
Fahrad
سه شنبه 25 خرداد 1395, 14:44 عصر
سلام کی میتونه یه برنامه بنویسه که خروجی زیر رو چاپ کنه؟:متفکر:
1
2 3 2
3 4 5 4 3
4 5 6 7 6 5 4
5 6 7 8 9 8 7 6 5
vahid-p
سه شنبه 25 خرداد 1395, 15:17 عصر
سلام کی میتونه یه برنامه بنویسه که خروجی زیر رو چاپ کنه؟:متفکر:
1
2 3 2
3 4 5 4 3
4 5 6 7 6 5 4
5 6 7 8 9 8 7 6 5
public class Example {
public static void main(String[] args) {
int count;
for (int i = 1; i <= 5; i++) {
count = i - 1;
print(i, count);
System.out.println();
}
}
public static void print(int st, int count) {
for (int i = st; i <= st + count; i++) {
System.out.print(i);
}
for (int i = st + count - 1; i >= st; i--) {
System.out.print(i);
}
}
}
shayanboy2
پنج شنبه 07 بهمن 1395, 09:42 صبح
در درک این منطق مشکل دارم.. لطفا کمکم کنید... مبتدی هستم و تازه شروع کردم
http://s2.picofile.com/file/8283853126/Untitled.jpg
vahid-p
پنج شنبه 07 بهمن 1395, 12:59 عصر
در درک این منطق مشکل دارم.. لطفا کمکم کنید... مبتدی هستم و تازه شروع کردم
http://s2.picofile.com/file/8283853126/Untitled.jpg
خط 6 که ++ بعد از متغیر a اومده، ابتدا assignment انجام میشه (b=a) و بعد یک واحد به a اضافه میشه.
در خط 7 که ++ قبل از a اومده، ابتدا یک واحد به a اضافه میشه و بعد assignment انجام میشه (c=a).
منطق خاصی هم نداره، این تعریفشه که طراحان کامپایلر این مد نظرشون بوده و از اونجایی که syntax جاوا شبیه C هست (از اون گرفتن) و چنین عملگری در C هم وجود داره، شاید برای همخوانی بیشتر اینکار رو انجام دادن. به عنوان اندیس آرایه و... هم میشه از این عبارت استفاده کنید مثلا x[i++] و همه جا میشه استفاده کرد.
توصیه میکنم از این روش کمتر استفاده بشه و ++ استفاده کنید ولی همزمان با اون هیچ کار دیگه ای انجام ندید.
یعنی مثلا
i++;
x[i];
اینجوری خوانایی و احتمال اشتباه برنامه کمتر میشه. نیازی نیست برنامه خیلی فشرده نوشته بشه (هر چند دونستن این موضوع برای خواندن کد سایرین لازمه، ولی خودت کمتر استفاده کن)
جدا از این موضوع، حتی توصیه میشه خیلی از مواقع به جای اینکه انواع توابع رو به عنوان پارامتر سایر توابع استفاده کنید و کلا از متغیر جدید کمتر استفاده میکنیم، روش خوبی نیست و استفاده متغیر بیشتر برای خوانایی برنامه مفیده و عملا تعریف چند تا متغیر یا اضافه شدن چند خط کد سرعت برنامه رو کند نمیکنه.
shayanboy2
دوشنبه 11 بهمن 1395, 00:42 صبح
دوستان یه سوالی برام توی مبحث if های تودر تو به وجود اومده. همون طور که توی عکس میبینید ما دو تا if و دو تا else داریم. اما من نمیدونم الان کدوم if برای کدوم else قراره اجرا بشه... این کد رو از کتاب BigJava که یه پی دی اف فارسی هست برداشتم...
http://uupload.ir/files/pqa2_222.jpg
shayanboy2
دوشنبه 11 بهمن 1395, 00:44 صبح
خط 6 که ++ بعد از متغیر a اومده، ابتدا assignment انجام میشه (b=a) و بعد یک واحد به a اضافه میشه.
در خط 7 که ++ قبل از a اومده، ابتدا یک واحد به a اضافه میشه و بعد assignment انجام میشه (c=a).
منطق خاصی هم نداره، این تعریفشه که طراحان کامپایلر این مد نظرشون بوده و از اونجایی که syntax جاوا شبیه C هست (از اون گرفتن) و چنین عملگری در C هم وجود داره، شاید برای همخوانی بیشتر اینکار رو انجام دادن. به عنوان اندیس آرایه و... هم میشه از این عبارت استفاده کنید مثلا x[i++] و همه جا میشه استفاده کرد.
توصیه میکنم از این روش کمتر استفاده بشه و ++ استفاده کنید ولی همزمان با اون هیچ کار دیگه ای انجام ندید.
یعنی مثلا
i++;
x[i];
اینجوری خوانایی و احتمال اشتباه برنامه کمتر میشه. نیازی نیست برنامه خیلی فشرده نوشته بشه (هر چند دونستن این موضوع برای خواندن کد سایرین لازمه، ولی خودت کمتر استفاده کن)
جدا از این موضوع، حتی توصیه میشه خیلی از مواقع به جای اینکه انواع توابع رو به عنوان پارامتر سایر توابع استفاده کنید و کلا از متغیر جدید کمتر استفاده میکنیم، روش خوبی نیست و استفاده متغیر بیشتر برای خوانایی برنامه مفیده و عملا تعریف چند تا متغیر یا اضافه شدن چند خط کد سرعت برنامه رو کند نمیکنه.
تشکردوست.عزیز..اماچراcشده12؟
vahid-p
دوشنبه 11 بهمن 1395, 15:51 عصر
تشکردوست.عزیز..اماچراcشده12؟
ابتدا a=10 . در خط بعد مقدار a اول به b اختصاص (assign) میده (b=10) و بعد یک واحد به a اضافه میشه (a=11). در خط بعدی ابتدا یک واحد به a اضافه میشه (a=12) و سپس به c اختصاص داده میشه (c=12). توضیحاتشم پست قبل گفتم.
دوستان یه سوالی برام توی مبحث if های تودر تو به وجود اومده. همون طور که توی عکس میبینید ما دو تا if و دو تا else داریم. اما من نمیدونم الان کدوم if برای کدوم else قراره اجرا بشه... این کد رو از کتاب BigJava که یه پی دی اف فارسی هست برداشتم...
برای مبهم نبودن این موضوع، از آکولاد { و } استفاده میکنن. اینها scope یا محدوده رو مشخص میکنند. معمولا IDE ها خودشون این رو مشخص میکنن (روی یکی از آکولادها برو تا اونجایی که بسته یا باز میشه رو مشخص کنه) تا شما راحتتر محدوده ها رو بدونید، هر چند اگر مرتب نوشته باشید، خیلی واضحه و نیازی به کمک IDE هم نیست.
به هر حال همیشه اون آکولاد که دیرتر باز شده، زودتر بسته میشه. یعنی هر if داخلتر باشه لزوما آکولاد باز و بستش درون یک آکولاد باز و بسته if یا for یا... بیرونی قرار میگیره. در نتیجه در اون دو تا if ، عبارت else داخلی مربوط به if داخلی هست، دلیلش این نیست که به اون نزدیکتره یا ...، تنها دلیلش اینه که آکولاد باز شده if بیرونی تا انتهای else داخلی هنوز بسته نشده و پس از اون بسته میشه و همچنین else داخلی دقیقا بعد از آکولاد بسته if داخلی اومده. همچنین چون if و else های داخلی بسته شدن، و if بیرونی هم بسته شده، else بیرونی مربوط به if بیرونی هست چون دقیقا بعد از بسته شدن آکولاد if بیرونی اومده.
در نتیجه اینجوری در نظر بگیرید که هر scope داخلی scope دیگه قرار میگیره و نمیشه بخشیش داخل scope باشه و بخشیش بیرون. scope هم با آکولاد باز و آکولاد بسته مشخص میشه.
اگر از IDE استفاده کنید، کم کم خودتون متوجه میشید و مبناش خیلی منطقیه و غیر این غیر منطقی به نظر میاد (چون باعث ابهام در گرامر زبان میشه)
ا
در زبانهایی مثل پایتون، دقیقا از تورفتگی برای این موضوع استفاده میکنند. در زبانهای جاوا، C و C++ و C# و... از آکولاد باز و بسته استفاده میشه، هر چند همزمان تورفتگی هم برای خوانایی بهتر استفاده میکنند (هر چند در معنا هیچ تفاوتی ایجاد نمیکنه، ولی در پایتون تورفتگیها معنای برنامه رو تغییر میده).
در Netbeans از کلیدهای میانبر Alt+Shift+F رو بزنید، تا کدتون مرتب بشه و تو رفتگی ها رو درست میکنه و واضح تر میتونید ببینید کدوم else مربوط به کدوم if هست و...
vahid-p
چهارشنبه 13 بهمن 1395, 04:25 صبح
یک نکته هم اضافه کنم امروز باهاش برخورد کردم، در خصوص این مورد:
i=i++;
به این معنی است که ابتدا مقدار i به صورت موقت ذخیره می شود، سپس یک واحد به i اضافه می شود و در نهایت مقدار موقت ذخیره شده به متغیر i تخصیص داده می شود (درنتیجه یک واحد اضافه شده از بین می رود). در نتیجه هر چند بار این عبارت را تکرار کنیم، مقدار i تغییر نمی کند.
برای مثال های قبلی هم به همین صورت بود، ولی چون متغیری که یک واحد اضافه می شود و متغیری که مقدار میگیرد یکسان نبود، مشکلی ایجاد نمی کند.
در نتیجه:
x = x++;
برابر است با:
int tmp = x;
x++;
x = tmp;منبع: http://stackoverflow.com/questions/16335552
shayanboy2
چهارشنبه 13 بهمن 1395, 21:45 عصر
به یه کد جدید برخوردم اما نمیدونم. ترتیب اجرای کد ها چجوریه! یه کد ساده ست .. پنج تا عدد رو میگیره و میانگینشون رو تحویل میده.... سوال بعدی اینه که مقدارهای ورودی ما رو کجا ذخیره میکنه؟
144361
Black Shadow
سه شنبه 14 آذر 1396, 16:58 عصر
درود.
یه سوالی داشتم و اون اینکه من قبلا زبان C# کار میکردم ولی حالا که وارد جاوا شدم میخوام ببینم این برنامه هم کمکی هایی مثله Resharper داره یا نه. در ضمن من چون تازه شروع کردم به کار با این نرم افزار میخوام بدونم محیط ویژوال نداره؟
vahid-p
سه شنبه 14 آذر 1396, 20:37 عصر
درود.
یه سوالی داشتم و اون اینکه من قبلا زبان C# کار میکردم ولی حالا که وارد جاوا شدم میخوام ببینم این برنامه هم کمکی هایی مثله Resharper داره یا نه. در ضمن من چون تازه شروع کردم به کار با این نرم افزار میخوام بدونم محیط ویژوال نداره؟
بله هم IDE های خوبی داره (حتما جستجو کنید در انجمن مفصل بحث شده) و هم ابزار برای طراحی فرم ها. هر چند قبلش باید جستجو کنی ببینی هر IDE چه امکاناتی رو بهت میده.
Resharper اگه منظورته پیشنهاد و... بده بله خصوصا IntelliJ که خیلی خوبه. حتی Netbeans هم خیلی تو این زمینه بهت کمک میکنه.
samadpour
دوشنبه 25 دی 1396, 18:50 عصر
سلام خدمت دوستان عزیز
من تازه جاوا رو شروع کردم با نت بینز شروع کردم
نت بینز 8.0 نصب کردم ولی ی مشکلی دارم وقتی داری کد مینویسی ی راهنمایی میاد بالا ک داخل کد نویسی بهت کمک میکنه . این برای من باز نمیشه
آموزشی ک دارم روی نت بینز 8.2 کار میکنه این نسخه رو هم نصب کردم ولی پروژه جدید باز نمیکنه
aliramazani
سه شنبه 26 دی 1396, 14:18 عصر
سلام
من با سی شارپ کار کردم و مسلطم. از اونجایی که میدونم جاوا چند سکویی هست چندتا سوال دارم:
1. آیا برنامه ای که من با جاوا در محیط ویندوزی نوشتم روی لینوکس و مک هم به راحتی اجرا میشه؟ یا کار خاصی لازم داره
2. چه دیتابیسی انتخاب کنم که وابستگی نداشه باشه. مثلا sql server وابسته به مایکروسافته و لینکوس نداره اونو پس مشکل ساز میشه
vahid-p
چهارشنبه 27 دی 1396, 10:39 صبح
سلام خدمت دوستان عزیز
من تازه جاوا رو شروع کردم با نت بینز شروع کردم
نت بینز 8.0 نصب کردم ولی ی مشکلی دارم وقتی داری کد مینویسی ی راهنمایی میاد بالا ک داخل کد نویسی بهت کمک میکنه . این برای من باز نمیشه
آموزشی ک دارم روی نت بینز 8.2 کار میکنه این نسخه رو هم نصب کردم ولی پروژه جدید باز نمیکنه
وقتی کدی مینویسی و Ctrl+Space میزنی بازم نمیاد؟
از طریق منو Tools->Options و سپس Editor->Code completion رو بیارید و تنظیماتش رو چک کنید مثلا Auto Popup Completion Window حداقل تیک خورده باشه. به صورت پیش فرض Language = All Languages و Auto Popup Completion ..., Auto Popup Documentation ..., Insert Single ..., Show Deprecated ... , Insert Closing Brackets ... تیک خوردن.
سلام
من با سی شارپ کار کردم و مسلطم. از اونجایی که میدونم جاوا چند سکویی هست چندتا سوال دارم:
1. آیا برنامه ای که من با جاوا در محیط ویندوزی نوشتم روی لینوکس و مک هم به راحتی اجرا میشه؟ یا کار خاصی لازم داره
2. چه دیتابیسی انتخاب کنم که وابستگی نداشه باشه. مثلا sql server وابسته به مایکروسافته و لینکوس نداره اونو پس مشکل ساز میشه
1- بله در صورتی که از کتابخانه استاندارد (اصلی جاوا) استفاده کنی یا از کتابخانه هایی استفاده کنی که برای همه سیستم عامل های مطرح جواب میدن. در حالت کلی بله کدتون روی تمام سیستم ها جواب میده، ولی گاهی اوقات از کتابخانه هایی یا کدهایی استفاده میشه که وابسته به سیستم عامل میشه. اما کم پیش میاد.
2- خیلی از مدیریت دیتابیس های متن باز برای هر سه سیستم عامل به خوبی جواب میدن. مثال بخوام بزنم MySQL, MariaDB، PostgreSQL, MongoDB و... که خیلی هم عالی هستن (MongoDB دیتابیس رابطه ای نیست). فقط لازمه جدا از برنامتون نصب بشن و سرورش نصب باشه. ولی دیتابیس هایی مثل H2 همراه برنامتون قابل اجرا هستند (به صورت یک فایل jar قرار میگیره) و امکانات خیلی خوبی هم داره ولی توصیه نمیکنم برای کارهای خیلی جدی ازش استفاده کنی.
samadpour
چهارشنبه 27 دی 1396, 16:18 عصر
[QUOTE=vahid-p;2386568]وقتی کدی مینویسی و Ctrl+Space میزنی بازم نمیاد؟
از طریق منو Tools->Options و سپس Editor->Code completion رو بیارید و تنظیماتش رو چک کنید مثلا Auto Popup Completion Window حداقل تیک خورده باشه. به صورت پیش فرض Language = All Languages و Auto Popup Completion ..., Auto Popup Documentation ..., Insert Single ..., Show Deprecated ... , Insert Closing Brackets ... تیک خوردن.
سلام
مرسی از راهنماییت رفتم داخل Options تیک زدم
الان ک Ctrl+Space میزنم میاد
دستت درد نکنه
aligee
پنج شنبه 19 بهمن 1396, 20:13 عصر
سلام به همگی،
یک سوالی دارم ، ی بهتر بگم یک راهکار نیاز دارم .
فکر نمیکنم در خواندن و یادگرفتن یک زبان برنامه نویسی مشکل خاصی وجود داشته باشه ، اما با خواندن مفاهیم پایه هم کسی برنامه نویس نمیشه ، کتابخانه ها و فریم ورک ها هستن که کار رو پیچیده میکنن و زمانبر .
سوال من اینه که کسی راهکاری برای یادگیری این حجم عظیم از API ها داره ، مخصوصا جاوا . چطوری میشه به کتابخانه ها و راه حل هایی که ارائه میدن تسلط پیدا کرد ؟
یا اصلن این رویکرد خواندن کتابخانه ها درسته؟
vahid-p
یک شنبه 22 بهمن 1396, 23:04 عصر
سلام به همگی،
یک سوالی دارم ، ی بهتر بگم یک راهکار نیاز دارم .
فکر نمیکنم در خواندن و یادگرفتن یک زبان برنامه نویسی مشکل خاصی وجود داشته باشه ، اما با خواندن مفاهیم پایه هم کسی برنامه نویس نمیشه ، کتابخانه ها و فریم ورک ها هستن که کار رو پیچیده میکنن و زمانبر .
سوال من اینه که کسی راهکاری برای یادگیری این حجم عظیم از API ها داره ، مخصوصا جاوا . چطوری میشه به کتابخانه ها و راه حل هایی که ارائه میدن تسلط پیدا کرد ؟
یا اصلن این رویکرد خواندن کتابخانه ها درسته؟
به نظر من درست نیست اینجوری فرض کنید که یک کتابخانه رو بخونید و بخوایید حتما یادبگیرید.
بلکه بستگی به نیاز باید کتابخونه ها رو یادگرفت (در حد معفولی نه همه و بقیش حین کار با سرچ حل میشه)
باید ببینید کدوم کتابخونه ها زیاد استفاده میشه و به کارتون میاد.
راه حل میانبری هم نداره
hassanmaleki73
سه شنبه 11 اردیبهشت 1397, 20:56 عصر
دوستان یه وب ویو دارم که یه بنر از یه سایت رو توی اپلیکیشن اندروید نمایش میده میخوام وقتی کاربر روی بنر کلیک کرد تا 24 ساعت بعد وب ویو قابل کلیک نباشه
از این کد استفاده کردم میدونم باید از تابع if استفاده کنم ولی نمیدونم قسمت run چه کدی قرار بدم ممنون میشم کمک کنید
final WebView myWebView = (WebView) findViewById(R.id.webView);
myWebView.loadUrl("https://www.google.com/");
myWebView.setWebViewClient(new WebViewClient());
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>و
return true;
}
});
}
}, 86400000);
vahid-p
یک شنبه 13 خرداد 1397, 04:13 صبح
سلام
میخواستم بدونم تفاوت جاوا با جاوااسکریپ چیه ؟ و از لحاظ بازار کاری کدومش بهتره ؟
همش تفاوته.
به نظر من سینتکس زبان هر چند تا حدی مهمه ولی تفاوت اصلی در کاربرد زبان هست. یعنی فلان زبان با چه هدفی ایجاد شده و قراره کجاها خوب جواب بده و همچنین چه امکاناتی رو در اختیار شما قرار میده.
علاوه بر تفاوت هایی در سینتکس، تفاوت اصلی جاوا و جاوا اسکریپت در کاربردهاشون هست.
جاوا اسکریپت هر چند امروزه در جاهای مختلف مورد استفاده قرار گرفته (بیشتر سینتکس و مدل اجراش و...) ولی هدف اصلی جاوا اسکریپت برای دینامیک کردن صفحات وب سمت کاربر بوده. یک صفحه وب بدون جاوا اسکریپت کار خیلی خاصی نمیتونه انجام بده خصوصا برای صفحات وب امروزی، به جز چند تا لینک که صفحه به صفحه جا به جا میشی یا ارسال فرم یا css که فقط تو ظاهر مورد استفاده قرار میگیره و کاری به عملکرد صفحه نداره. اما امروزه به کمک زبان جاوا اسکریپت صفحات وبی میبینیم که مثل یک نرم افزار پر از امکاناته و کلی پردازش میتونه انجام بده. شما همین نسخه های وب پیام رسان های مختلف مثل تلگرام و... رو ببینید مثل یک اپلیکیشن هست. میشه گفت جاوا اسکریپت در این زمینه تک هست و هیچ رقیب و مشابه ای ندارد (با یک تبصره که قبلا جاوا اپلت و فلش تا حدودی چنین ویژگی هایی رو داشتن اما نه به این صورت که جاوا اسکریپت با صفحه وب مچ شده و اونا درون صفحه قرار میگرفتن به جای مدیریت صفحه)
البته جدیدا جاوااسکریپت در سمت سرور هم استفاده میشه در قالب Node.js یا در بعضی انجین های بازی سازی هم برای دینامیک بازی استفاده می کنن و شاید خیلی جاهای دیگه
اما جاوا خیلی گسترده است. به جز کاری که فقط مختص جاوا اسکریپت بود، جاوا به عنوان سرویس دهنده در سرورها مورد استفاده قرار میگیره (مثل php) و برای ساخت اپلیکیشن های دسکتاپ (ویندوز، لینوکس، مک و...) استفاده میشه. البته جاوا شاخه های دیگه هم داره که یا قدیمی شده یا هم خیلی خاص منظوره هست و همه استفاده نمی کنن مثل جاوا موبایل، جاوا اپلت، جاوا سیستم های نهفته.
ضمنا برای برنامه نویسی اندروید، خب قطعا زبان جاوا که کتابخونه هاش به این زبان ارائه میشه (+ Cpp) هم زبان مناسبی هست. البته هم خانواده های زیادی داره که کار کدنویسی رو راحت کرده ولی همشون کدهاشون به جاوا تبدیل میشه مثل kotlin, scala و...
اما به جز کاربردهای جاوا که ممکنه بگید خب خیلی از زبان ها برخی از این ویژگی ها رو دارن که کاملا درسته، اما جاوا به دلیل قدمت و برنامه نویسان زیادی که داشته کتابخانه های قوی و خیلی زیادی داره که وجه تمایز اصلیش به نظرم همینه. راستی یه ویژگی جاوا این هست که تقریبا کدی که مینویسید بدون نیاز به تغییر روی سیستم عامل های مختلف اجرا میشه.
rooyin
سه شنبه 09 مرداد 1397, 23:12 عصر
آيا در زبان جاوا راهي هست تا استرينگي كه خودش
يه عمليه رياضي هست را به انتجر تبديل نماييم؟
مثال
String result=“2+4”;
را طوري به انتجر تبديل نماييم كه انتجر مقدار 6 را ذخيره نمايد
vahid-p
چهارشنبه 10 مرداد 1397, 23:29 عصر
آيا در زبان جاوا راهي هست تا استرينگي كه خودش
يه عمليه رياضي هست را به انتجر تبديل نماييم؟
مثال
String result=“2+4”;
را طوري به انتجر تبديل نماييم كه انتجر مقدار 6 را ذخيره نمايد
در این تاپیک پاسخ داده شده:http://barnamenevis.org/showthread.php?550265
amin224
یک شنبه 08 مهر 1397, 08:45 صبح
سلام در هنگام برنامه نویسی در eclipse به من این error را داد میخواستم ببینم مشکل از کجاست در ضمن ویندوزم 10 است
148988
148989
vahid-p
یک شنبه 08 مهر 1397, 09:57 صبح
سلام در هنگام برنامه نویسی در eclipse به من این error را داد میخواستم ببینم مشکل از کجاست در ضمن ویندوزم 10 است
شاید به خاطر اینه که هیچ پکیجی نساختید. هر چند لزومی نداره ولی خیلی اوقات به مشکل میخورید. یک پکیج بسازید و کلاس اصلیتون رو در اون پکیج قرار بدید.
mousavi71
دوشنبه 24 دی 1397, 07:53 صبح
سلام
من تازه دارم جاوا یاد میگیرم و باید یک کد رو بخونم و کامل بفهممش.
راهنمایی میخواستم:
private static ArrayList<Series> makeSeries(MiniBox settings, String[] args) {
با مفهوم private و static اشنا هستم ولی نمیدانم کدام یک از ArrayList و Series و makeSeries و MiniBox دستور هستند و کدام یک صرفا اسم هستند.
اصلا معنی این خط چیست؟ داره array درست میکنه؟
67safari
سه شنبه 15 بهمن 1398, 18:22 عصر
من دیتابیس یا SQl server ایجاد کردم و در جاوا بهش متصل می شم ولی هرکاری می کنم تا پایگاه دادم رو در جدول تو جاوا نشون بده موثر واقع نمیشه چکار کنم من ؟
تمام موارد اتصال رو هم درست انجام می دم ولی باز جدول نشون نمی ده؟
eisenstein
جمعه 29 فروردین 1399, 23:27 عصر
کدی که اشتراک دو تا ماتریس رو حساب کنه و توی یه ماتریس جداگونه بنویسه و به جای بقیه عناصر 0 بذاره به چه صورته؟
این متدی که نوشتم مشکلش چیه؟ :
public static void share(int a[][],int b[][],int c[][],int m,int n)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
c[i][j]=0;
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]==b[i][j])
{
c[i][j]=a[i][j];
}
}
}
}
mhjbarnamenevis
پنج شنبه 29 آبان 1399, 01:40 صبح
سلام.
جاواداک را از کجا میتوان دانلود کرد؟
مثلا برای این کتابخانه:
https://poi.apache.org/apidocs/dev/
هیچ جای صفحه گزینهی دانلود یک فایل jar نیست که من بگیرم و به کتابخانهام اضافهاش کنم.
در اینترنت هم جایی برای این کتابخانه documentation ای نیست که دانلود کنم.
نمیدانم بقیه چه کار میکنند؟
فقط هم این نیست. چندین کتابخانه دیگر هم هست.
در برخی فایلها انگار این documentation گنجانده شده در برخی نه!
:ناراحت::افسرده::افسرده::افس ده::افسرده::متفکر::اشتباه:
ویرایش: الان اینجا را دیدم که میتواند پرونده جار بدهد: https://javadoc.io/doc/org.apache.poi/poi-ooxml/latest/index.html
ولی این یک راه حل اصولی نیست. اصلا معلوم نیست چه به چه است... یک مقدار فضا گیج کننده و مبهم است. یک راهکار مشخص باید باشد که من جایی ندیدم.
-------------------------
ویرایش:
فهمیدم که تو همون سایت آپاچی یک پیوندی هست (گاهی در برخی جاهای سایت) برای دانلود این جاواداک با فرمت جار.
و چیز دیگهای که فهمیدم این بود که گویا اگه همین صفحه اچ تی ام ال رو به صورت کامل بشه بارگیری کرد و تو یه پرونده زیپ جا داد همون ویژگی رو داره. منتها طریقهاش رو نمیدونم چطوره.
mhjbarnamenevis
پنج شنبه 29 آبان 1399, 01:57 صبح
سوال دیگه این که الان تو جاواداک نوشته این کلاس depricate شده.
تو بعضی از جاواداکها دیدم که مینویسند به جایش از فلان کلاس/روش استفاده کنید. اینجا ننوشته.
الان من این را از کجا بفهمم؟ (البته احتمالا در stackoverflow پاسخش هست ولی) روش کلیای برای فهمیدن این موضوع هست؟
تصویر نمونه مشکل و توضیح جاواداک:
https://i.vgy.me/rHx07j.png
mhjbarnamenevis
جمعه 30 آبان 1399, 05:42 صبح
آیا امکانش هست در جاوا همچنین کاری کرد:
//CLASS:
private static class MyClass {
final String adds = readFromFile("fileAddress");
public MyClass() {
//nothing here!
}
}
//USAGE:
String string = MyClass.adds;
؟
یعنی متغیر عمومی درون کلاس را بدون constructor و یا تابع تعریف کرد.
منظورم استفاده از یک تابع (در اینجا تابع readFromFile) در اول کلاس است. عملا این کار باید در constructor انجام پذیرد ولی برای سهولت این کار را در همان آغاز کلاس انجام دهیم. میشود؟
-------------------
ویرایش:
آزمایش کردم و شد. پس شدن میشود. ولی این که اصولی باشد یا نه؟ نمیدانم...
منظورم این است که... یعنی در جایی باعث ایجاد مشکل نشود یا باعث زیاد مصرف کردن منابع نشود (که احتمالا میشود ولی برای من اینجا زیاد مهم نیست)... چون اگر تابع readFromFile بخواهد هر بار که این متغیر از این کلاس را فرامیخوانیم برود هارد را بالا پایین کند احتمالا این روش زیاد استاندارد نخواهد بود...
اگر باعث زیاد مصرف کردن منابع شود... آیا میشود با افزودن دو واژه static final به آغاز این متغیر کار را درست کرد؟
Argavan.A
شنبه 29 آذر 1399, 11:56 صبح
سلام دوستان
کسی می تونه به سوالات من پاسخ بده؟
1- متدی که محیط دايره را محاسبه می کند
2-برنامه ای که شعاع (عدد صحیح) دايره هايی که محیطی کمتر از 50 دارند را چاپ کند.
3- برنامه هايی که محیط دايره هايی با شعاع يک تا 10 را چاپ کند.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.