السطر الذي تكتبه في 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 ليست حرفًا للشاشة. الفاصلة المنقوطة تنهي سطر الاستيراد. اترك سطرًا فارغًا تحته، ثم الفئة نفسها، public class Mint التي لديك من قبل. هذا الملف ما زال بلا سطر package. الاستيراد هو السطر الأول، وليس سطرًا داخل main.
داخل main، السطر الجديد الأول يصنع أداة القراءة: 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. حين يكون الملف سليمًا، هذا الأمر لا يكتب أي سطر. سطر الاستيراد ووجود 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، أعد الملف ذا السطر الواحد.
سطر الاستيراد فوق public class
لا يعرف الملف Scanner إلا إذا كان سطر الاستيراد موجودًا. إذا حذفت import java.util.Scanner; وتركت بقية الملف الذي تحتفظ به، يكتب javac خطأ. لا يبقى صامتًا. لا شاشة تُقرأ، لأنك لا تكتب java Mint بينما javac يكتب خطأ. لا تحتاج إلى كلمات الخطأ بحرفها. الإصلاح أن تعيد import java.util.Scanner; سطرًا أول، فوق public class Mint، مع فاصلته المنقوطة. احفظ، واكتب javac Mint.java مرة أخرى، وانتظر إلى أن لا يكتب javac أي سطر.
هذا الملف الثالث بلا استيراد. ليس الملف الذي تحتفظ به. احفظه فقط إلى أن يكتب javac الخطأ، ثم أعد سطر الاستيراد.
public class Mint {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String plant = reader.nextLine();
System.out.println(plant);
}
}
يفشل سطر الاستيراد أيضًا إذا وضعته داخل main، تحت القوس المفتوح، أو إذا وضعته تحت public class. تقرأ Java الاستيراد فوق public class، لا كخطوة داخل main. أعده إلى السطر الأول. الفاصلة المنقوطة الغائبة عن ذلك السطر فشل من النوع نفسه: يكتب javac خطأ، ولا تشغّل java Mint. الملف الذي تحتفظ به فيه الفاصلة المنقوطة.
System.in هو المكان الوحيد الذي تصل به هذه الصفحة الأداة reader. Scanner reader = new Scanner(System.out); يطلب أداة قراءة على الشاشة. System.out هو ما يكتب إليه println. ليس المكان الذي تُقرأ منه الحروف المكتوبة. يكتب javac خطأ. لا يبقى صامتًا. لا تكتب java Mint. غيّر System.out إلى System.in في ذلك السطر وحده. سطر الكتابة يُبقي System.out، لأن سطر الكتابة هو الشاشة. سطر reader يُبقي System.in، لأن سطر 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 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); يصنع الأداة على لوحة المفاتيح. String plant = reader.nextLine(); يحتفظ بالسطر، من غير Enter. System.out.println(plant); يكتبه وينهي السطر. plant = reader.nextLine(); لاحقًا ينتظر Enter ثانيًا. الاستيراد، و System.in، ووجود reader قبل استخدامه، هي ما يُبقي javac صامتًا. الصفحة التالية تترك لوحة المفاتيح. تنظر إلى أنواع القيم التي يستطيع الاسم أن يحتفظ بها حين تكتب تلك القيم في الملف، وتبدأ من الأعداد، لا من سطر تكتبه.
الشاشة هي السطر الذي كتبته
الملف الذي تحتفظ به لا يحتوي على leaf. تكتب leaf بعد java Mint وتضغط Enter. تعرض الطرفية تلك الكتابة. ثم يكتب البرنامج leaf في السطر التالي. المسافة التي تكتبها جزء من ذلك السطر. nextLine الثاني هو Enter ثانٍ، وليس في الملف الذي تحتفظ به.
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى