خط تایپشده در Java
شما میخواهید صفحه کلمهای را نشان دهد که بعد از شروع برنامه تایپ میکنید، کلمهای که در فایل نوشته نشده. در صفحهٔ قبل کلمه بین گیومهها روی خط نگهداری نشسته بود، پس صفحهٔ دیگر یعنی ویرایش Mint.java. در این صفحه فایل اصلاً leaf ندارد. یک نام میسازد، plant، و بعد منتظر میماند. leaf را تایپ میکنید و Enter میزنید. خط نویسنده از نام لخت استفاده میکند و برنامه leaf را مینویسد. Java را دوباره نصب نمیکنید. یادداشت اضافه نمیکنید، و راه دومی برای تمام کردن خط هم یاد نمیگیرید. میدانید یک نام میتواند حرف نگه دارد و println همان حرفها را مینویسد. کار تازه این است که آن نام از خطی پر شود که تایپ میکنید.
فایل منتظر یک خط تایپشده میماند
Mint.java را باز کنید. نام فایل Mint.java میماند، چون public class Mint هنوز نام فایل است. این صفحه نام فایل را عوض نمیکند و public class Mint را هم عوض نمیکند. خط اول فایل، بالای public class Mint، این است: import java.util.Scanner;. این خط به فایل اجازه میدهد از Scanner استفاده کند. خط نویسنده نیست. Scanner حرفی برای صفحه نیست. نقطهویرگول خط import را تمام میکند. زیر آن یک خط خالی بگذارید، بعد همان public class Mint که از قبل دارید. این فایل هنوز خط package ندارد. import خط اول است، نه خطی درون main.
درون main، اولین خط تازه reader را میسازد: Scanner reader = new Scanner(System.in);. Scanner میگوید reader چه جور چیزی است. reader نام است و با r کوچک شروع میشود. علامت = آن ابزار را در این نام نگه میدارد. new Scanner(System.in) ابزار را میسازد و به System.in وصلش میکند. System.in جایی است که حرفهای تایپشده از آن خوانده میشوند. System.out، که از قبل روی خط نویسنده به کار میبرید، صفحه است. این دو یکی نیستند. نقطهویرگول این خط را تمام میکند. این خط صفحه را نمینویسد و منتظر تایپ شما هم نمیماند. فقط reader را میسازد.
خط بعد همان نامی را پر میکند که از صفحهٔ قبل میشناسید: String plant = reader.nextLine();. String هنوز یعنی این نام حرف نگه میدارد. plant هنوز با p کوچک شروع میشود. علامت = هنوز حرفها را در آن نام نگه میدارد. تازه، سمت راست است. reader.nextLine() گیومه ندارد. روی این خط leaf نیست. این خط از reader یک خط تایپشده میخواهد. برنامه همانجا منتظر میماند تا Enter را بزنید. وقتی Enter را زدید، nextLine حرفهایی را نگه میدارد که پیش از آن Enter تایپ کردهاید. خود Enter را نگه نمیدارد. بعد خط با نقطهویرگول تمام میشود. نگه داشتن هنوز نوشتن نیست. برنامه هنوز خط خودش را ننوشته.
خط نویسنده همان نام لخت میماند، با همان شکل فایلی که در صفحهٔ قبل نگه داشتید: System.out.println(plant);. بدون گیومه. Java نام plant را میخواند، حرفهایی را که آن نام نگه داشته مینویسد، و خط را تمام میکند. آن حرفها همان چیزی است که nextLine همین حالا نگه داشته. اگر leaf را تایپ کرده باشید، برنامه leaf را مینویسد. اگر stem را تایپ کرده باشید، برنامه stem را مینویسد. بین این دو اجرا فایل عوض نشده. فایل را ذخیره کنید.
فایلی که نگه میدارید
این را با نام Mint.java ذخیره کنید. این همان فایلی است که این صفحه نگه میدارد. کلمهای که تایپ خواهید کرد داخل فایل نیست. فایل را برای حرفهای l و e و a و f بگردید. آنجا نیستند. ابزار خواندن reader نام دارد. خطِ نگه داشته plant نام دارد. خط نویسنده از plant استفاده میکند و گیومه ندارد.
import java.util.Scanner;
public class Mint {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String plant = reader.nextLine();
System.out.println(plant);
}
}
فایل را از بالا بخوانید و تصمیم بگیرید چه چیزی میتواند به صفحه برسد. import java.util.Scanner; فقط اجازه میدهد فایل از Scanner استفاده کند. public class Mint نام فایل را مشخص میکند. public static void main(String[] args) جایی است که Java شروع میکند. هیچکدام از آن کلمهها حرفی برای صفحه نیستند. کلمهٔ String روی خط main هنوز همان String نیست که plant را میسازد. Scanner reader = new Scanner(System.in); ابزار reader را میسازد. چیزی نمینویسد. String plant = reader.nextLine(); یک خط تایپشده را در plant نگه میدارد. خودش چیزی نمینویسد. System.out.println(plant); تنها خط نویسنده است. حرفهای نگه داشته را مینویسد و خط را تمام میکند. نام plant نوشته نمیشود. نام reader نوشته نمیشود. System نوشته نمیشود. نقطهویرگول نوشته نمیشود.
آنچه تایپ میکنید و آنچه برنامه مینویسد
در پوشهای که این Mint.java در آن است، javac Mint.java را بنویسید. وقتی فایل درست باشد، این فرمان هیچ خطی نمینویسد. خط import و وجود reader باعث نمیشود javac خطی بنویسد، و باعث نمیشود خطا بدهد. بعد java Mint را بنویسید. بعد از java پسوند .java را ننویسید. همین دو فرمان را در Windows و در macOS مینویسید. این صفحه آن علامتی را که پوسته پیش از فرمان نشان میدهد نقل نمیکند. آن علامتها فرق دارند و خط برنامه نیستند.
بعد از java Mint، برنامه روی reader.nextLine() منتظر است. هنوز تمام نشده، و leaf را هم ننوشته، چون هنوز خطی به آن ندادهاید. نشانگر روی یک خط تازه نشسته. حرفهای l و e و a و f را تایپ کنید. ترمینال همان حرفها را همانطور که کلید را میزنید نشان میدهد. این نشان دادن، تکرار کلیدها در ترمینال است. System.out.println نیست. بعد Enter را بزنید.
Enter انتظار را تمام میکند. nextLine کلمهٔ leaf را در plant نگه میدارد و Enter را نگه نمیدارد. بعد println همان leaf را مینویسد و خط را تمام میکند. leaf را میبینید، و زیر آن دوباره leaf. leaf اول کلیدهایی است که ترمینال نشان داده. leaf دوم برنامه است. خط برنامه گیومه ندارد. چهار حرف است، بعد خط تمام میشود. برنامه بعد از همان خط نویسنده تمام میشود. اگر فقط میخواهید خط برنامه را بسنجید، خطی را ببینید که بعد از زدن Enter ظاهر میشود.
اگر خط برنامه plant باشد، خط نویسنده دور plant گیومه دارد. فایلی که نگه میدارید اینطور نیست. اگر خط برنامه mint باشد، خط نویسنده هنوز System.out.println("mint"); است، یا فایل هنوز کلمهٔ گیومهدار صفحهٔ پیش را دارد. اگر java Mint بیآنکه منتظر بماند یکباره leaf را نوشت، فایل هنوز کلمهای را میان گیومه نگه میدارد، مثل String plant = "leaf";، و nextLine را به کار نمیبرد. دور leaf را برای گیومه بگردید. فایلی که نگه میدارید گیومه ندارد. برای صفحهای که کلمهٔ غلط نشان میدهد Java را دوباره نصب نمیکنید.
حروف بزرگ همانطور که تایپ میکنید رونویسی میشوند. اگر Leaf را با L بزرگ تایپ کنید و Enter بزنید، خط برنامه Leaf است. فایل هنوز آن حرفها را ندارد. Enter خالی هم یک خط واقعی است. Enter را بزنید بیآنکه حرفی تایپ کنید. nextLine هیچ حرفی در plant نگه نمیدارد. println خطی مینویسد که حرف ندارد. برنامه اجرا شد. انتظار تمام شد چون Enter را زدید. فایلی که نگه میدارید همان است که با leaf امتحان میکنید، چهار حرف کوچک.
فاصله جزو همان خط است
nextLine تا Enter میخواند، نه تا فاصله. leaf را تایپ کنید، بعد یک فاصله، بعد stem، بعد Enter. حرفهایی که در plant نگه داشته میشود leaf است، یک فاصله، و stem. System.out.println(plant) عبارت leaf stem را مینویسد. فاصله یک نویسهٔ نگه داشته است، همانطور که در صفحهٔ قبل فاصلهٔ داخل گیومه هم نگه داشته میشد. این صفحه خط را سر فاصله قطع نمیکند. فایلی که نگه میدارید هنوز همان خواندنِ یک خط است. وقتی فاصله را روی صفحه میخواهید، فقط چیزی را که تایپ میکنید عوض میکنید، نه فایل را.
دو خط تایپ، دو Enter
یک reader میتواند خط دوم را هم بگیرد. زیر اولین خط نویسنده، خط تازهای را در همان نام نگه دارید، بعد نام را دوباره بنویسید. خط تازهٔ نگهداری plant = reader.nextLine(); است. با String شروع نمیشود. plant از قبل هست، پس این خط فقط حرفهایی را عوض میکند که نام نگه داشته. خط نویسندهٔ بعدی باز System.out.println(plant); است. برنامه حالا دو بار منتظر میماند. هر nextLine برای Enter خودش منتظر میماند.
این فایل دوم است. فایلی نیست که نگه میدارید. فایلی که نگه میدارید یک بار منتظر میماند و یک بار مینویسد. وقتی دو خط تایپشده میخواهید این فایل دوم را با نام Mint.java ذخیره کنید، بعد همان یک nextLine و یک println را دوباره بگذارید.
import java.util.Scanner;
public class Mint {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String plant = reader.nextLine();
System.out.println(plant);
plant = reader.nextLine();
System.out.println(plant);
}
}
javac Mint.java را بنویسید. فایل درست است، پس javac هیچ خطی نمینویسد. خط دوم نگهداری مجاز است String نداشته باشد، و این ننوشتن باعث خطای javac نمیشود. بعد java Mint را بنویسید. برنامه منتظر میماند. leaf را تایپ کنید و Enter بزنید. ترمینال leaf را نشان میدهد، و برنامه زیر آن leaf را مینویسد. برنامه دوباره منتظر میماند. هنوز تمام نشده. stem را تایپ کنید و Enter بزنید. ترمینال stem را نشان میدهد، و برنامه زیر آن stem را مینویسد. خطهای برنامه leaf است، بعد stem. حرفهایی که ترمینال از کلیدها نشان داده بالای هر کدام از این خطها نشستهاند. اگر هر دو خط برنامه leaf بگویند، nextLine دوم اجرا نشده، یا هر دو بار leaf را تایپ کردهاید. اگر برنامه پیش از آنکه خط دوم را تایپ کنید stem را بنویسد، println دوم زیر یک nextLine دوم ننشسته. صفحه ترتیب خطهای فایل را دنبال میکند، و هر انتظار دنبال همان nextLine است که هنوز Enter نگرفته.
برای همان نام، String را بار دوم ننویسید. String plant = reader.nextLine(); اگر زیر خطی باشد که plant را از قبل ساخته، اشتباه دیگری است. آن خط میخواهد plant را دوباره بسازد. javac خطا مینویسد و ساکت نمیماند. لازم نیست متن دقیق آن خطا را بدانید. نکتهٔ مفید این است که javac یک خط نوشته، پس هنوز java Mint را نمینویسید. String دوم را حذف کنید و plant = reader.nextLine(); را بگذارید. نام یک بار ساخته میشود. خطهای بعدی فقط حرفهایی را عوض میکنند که نگه داشته. در فایلی که نگه میدارید اصلاً nextLine دوم نیست. بعد از آنکه leaf و بعد stem را دیدید، فایل یکخطی را دوباره بگذارید.
خط import بالای public class است
تا خط import نباشد، فایل Scanner را نمیشناسد. اگر import java.util.Scanner; را حذف کنید و بقیهٔ فایلی که نگه میدارید بماند، javac خطا مینویسد. ساکت نمیماند. صفحهای برای خواندن نیست، چون تا javac خطا مینویسد java Mint را نمینویسید. لازم نیست متن دقیق آن خطا را بدانید. تعمیر این است که import java.util.Scanner; را با نقطهویرگولش، بهعنوان خط اول، بالای public class Mint برگردانید. ذخیره کنید، دوباره javac Mint.java را بنویسید، و صبر کنید تا javac هیچ خطی ننویسد.
این فایل سوم، فایلِ بدون import است. فایلی نیست که نگه میدارید. فقط تا وقتی ذخیره کنید که javac خطا را بنویسد، بعد خط import را سر جایش بگذارید.
public class Mint {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String plant = reader.nextLine();
System.out.println(plant);
}
}
خط import اگر درون main باشد، زیر آکولاد باز، یا اگر پایین public class بنشیند، باز هم خطا است. Java خط import را بالای public class میخواند، نه بهعنوان گامی درون main. آن را به خط اول برگردانید. جا افتادن نقطهویرگول همان خط هم از همین جنس است: javac خطا مینویسد، و java Mint را اجرا نمیکنید. فایلی که نگه میدارید نقطهویرگول را دارد.
System.in تنها جایی است که این صفحه reader را به آن وصل میکند. Scanner reader = new Scanner(System.out); از reader میخواهد روی صفحه بایستد. System.out همان جایی است که println در آن مینویسد. جای حرفهای تایپشده نیست. javac خطا مینویسد. ساکت نمیماند. java Mint را ننویسید. در همان یک خط System.out را به System.in عوض کنید. خط نویسنده System.out را نگه میدارد، چون خط نویسنده صفحه است. خط reader همان System.in را نگه میدارد، چون خط reader صفحهکلید است. جا بهجا کردنشان همان اشتباه است.
این فایل چهارم reader را به صفحه وصل کرده. فایلی نیست که نگه میدارید. فقط تا وقتی ذخیره کنید که javac خطا را بنویسد، بعد out را به in عوض کنید.
public class Mint {
public static void main(String[] args) {
Scanner reader = new Scanner(System.out);
String plant = reader.nextLine();
System.out.println(plant);
}
}
reader باید اول وجود داشته باشد
Java فایل را از بالا میخواند. خطی که reader را میسازد باید بالای خطی باشد که از reader استفاده میکند. اگر اول String plant = reader.nextLine(); باشد و بعد Scanner reader = new Scanner(System.in);، خط نگهداری نام reader را پیش از وجود reader به کار میبرد. javac خطا مینویسد. ساکت نمیماند. این همان قاعدهٔ ترتیب صفحهٔ قبل است، وقتی plant پیش از String plant به کار رفته بود. تعمیر این است که خط Scanner را بالای خط nextLine ببرید. یک نام نمیتواند در خطی زودتر از خط سازندهاش به کار برود.
این فایل پنجم ترتیبش بههم ریخته. فایلی نیست که نگه میدارید. فقط تا وقتی ذخیره کنید که javac خطا را بنویسد، بعد خط Scanner را بالای nextLine بگذارید. در فایلی که واقعاً اجرا میکنید خط import هنوز لازم است. این فایل خراب import را نگه داشته تا تنها اشتباه تازه، ترتیب باشد.
import java.util.Scanner;
public class Mint {
public static void main(String[] args) {
String plant = reader.nextLine();
Scanner reader = new Scanner(System.in);
System.out.println(plant);
}
}
javac Mint.java را بنویسید. javac خطا مینویسد. java Mint را ننویسید. Scanner reader = new Scanner(System.in); را بالای String plant = reader.nextLine(); ببرید. ذخیره کنید. دوباره javac Mint.java را بنویسید. حالا javac هیچ خطی نمینویسد. بعد java Mint منتظر میماند. leaf را تایپ کنید، Enter بزنید، و برنامه leaf را مینویسد.
گیومه روی خط نویسنده هنوز همان معنی صفحهٔ قبل را دارد. بعد از یک nextLine واقعی، اگر خط نویسنده System.out.println("plant"); باشد، میتوانید leaf را تایپ کنید و Enter بزنید، و خط برنامه باز هم plant است. گیومهها حرفهای p و l و a و n و t را مشخص میکنند. Java سراغ نام نمیرود. خطی که تایپ کردید در plant نگه داشته شد و هرگز نوشته نشد. تعمیر، نام لخت است: System.out.println(plant);. فایلی که نگه میدارید از قبل همین نام لخت را دارد. روی خط نگهداری هم دور leaf گیومه نگذارید. String plant = "leaf"; کلمهٔ leaf را از خود فایل نگه میدارد و هرگز منتظر نمیماند. این صفحه nextLine را روی خط نگهداری نگه میدارد و خط نویسنده را لخت نگه میدارد.
حالا میتوانید Mint.java را اجرا کنید، منتظر بمانید، یک خط تایپ کنید، Enter بزنید، و ببینید برنامه همان خط را مینویسد. import java.util.Scanner; بالای public class نشسته. Scanner reader = new Scanner(System.in); ابزار reader را روی صفحهکلید میسازد. String plant = reader.nextLine(); خط را نگه میدارد، بدون Enter. System.out.println(plant); آن را مینویسد و خط را تمام میکند. plant = reader.nextLine(); بعدی برای Enter دوم منتظر میماند. import، و System.in، و بودن reader پیش از استفادهاش، همان چیزهایی هستند که javac را ساکت نگه میدارند. صفحهٔ بعد صفحهکلید را کنار میگذارد. به جنس مقدارهایی نگاه میکند که یک نام میتواند نگه دارد وقتی آن مقدارها را خودتان در فایل مینویسید، و از عدد شروع میکند، نه از خطی که تایپ میکنید.
صفحه همان خطی است که تایپ کردید
فایلی که نگه میدارید leaf ندارد. بعد از java Mint کلمهٔ leaf را تایپ میکنید و Enter میزنید. ترمینال آن تایپ را نشان میدهد. بعد برنامه در خط بعد leaf را مینویسد. فاصلهای که تایپ میکنید جزو همان خط است. nextLine دوم یعنی Enter دوم، و در فایلی که نگه میدارید نیست.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود