JavaRush /جاوا بلاگ /Random-UR /جاوا میں سکینر کلاس

جاوا میں سکینر کلاس

گروپ میں شائع ہوا۔
ہیلو! ہمارا آج کا سبق خاص ہوگا! اس سے پہلے، مسائل کو حل کرنے اور پروگرام لکھتے وقت، الگورتھم آسان تھا: ہم کچھ کوڈ لکھتے ہیں، main() طریقہ چلاتے ہیں ، پروگرام وہی کرتا ہے جو اس کی ضرورت ہوتی ہے، اور باہر نکل جاتا ہے۔ لیکن اب سب کچھ بدل جائے گا! آج ہم سیکھیں گے کہ پروگرام کے ساتھ صحیح معنوں میں کیسے تعامل کیا جائے: ہم اسے اپنے اعمال کا جواب دینا سکھائیں گے! آپ پہلے ہی سمجھ سکتے ہیں کہ ہم اس کے ساتھ کہاں جا رہے ہیں۔ ہم اس لیکچر کو جاوا لینگویج کلاسز - سکینر میں سے ایک کے تفصیلی تجزیہ کے لیے وقف کریں گے۔ اگر آپ کو صارفین کے داخل کردہ ڈیٹا کو پڑھنے کی ضرورت ہو تو یہ کلاس مفید ہوگی۔ اس سے پہلے کہ ہم کوڈ سیکھنے کی طرف بڑھیں، مجھے بتائیں، کیا آپ نے کبھی سکینر جیسی ڈیوائس دیکھی ہے؟ یقیناً ہاں۔ اسکینر کی اندرونی ساخت کافی پیچیدہ ہے، لیکن اس کے کام کا جوہر بہت آسان ہے: یہ اس ڈیٹا کو پڑھتا ہے جو صارف اس میں داخل کرتا ہے (مثال کے طور پر پاسپورٹ یا انشورنس پالیسی) اور پڑھی ہوئی معلومات کو میموری میں محفوظ کرتا ہے (مثال کے طور پر ، ایک تصویر کی شکل میں)۔ تو، آج آپ اپنا سکینر بنائیں گے! یقینا، وہ دستاویزات کو نہیں سنبھال سکتا، لیکن وہ متن کی معلومات کو اچھی طرح سے سنبھال سکتا ہے :) چلیں!سکینر کلاس - 1

جاوا سکینر کلاس

پہلی اور سب سے اہم چیز جس سے ہمیں واقف ہونے کی ضرورت ہے وہ ہے کلاس java.util.Scanner۔ اس کی فعالیت بہت آسان ہے۔ ایک حقیقی سکینر کی طرح، یہ اس ذریعہ سے ڈیٹا پڑھتا ہے جسے آپ اس کے لیے بتاتے ہیں۔ مثال کے طور پر، ایک لائن سے، ایک فائل سے، کنسول سے۔ پھر وہ اس معلومات کو پہچانتا ہے اور ضرورت کے مطابق اس پر کارروائی کرتا ہے۔ آئیے سب سے آسان مثال دیتے ہیں:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("I love you, Petra creation,\n" +
               "I love your stern, slim look,\n" +
               "Neva sovereign current,\n" +
               "Coastal granite");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
ہم نے ایک سکینر آبجیکٹ بنایا اور اس کے لیے ڈیٹا سورس (متن کے ساتھ ایک تار) کا تعین کیا۔ یہ طریقہ nextLine()ڈیٹا سورس تک رسائی حاصل کرتا ہے (کوٹرینز کے ساتھ ہمارا متن)، وہاں اگلی لائن ڈھونڈتا ہے جسے اس نے ابھی تک نہیں پڑھا ہے (ہمارے معاملے میں، پہلا) اور اسے واپس کر دیتا ہے۔ جس کے بعد ہم اسے کنسول میں آؤٹ پٹ کرتے ہیں: کنسول آؤٹ پٹ:

Люблю тебя, Peterа творенье,
ہم اس طریقہ کو nextLine()کئی بار استعمال کر سکتے ہیں اور نظم کے پورے ٹکڑے کو آؤٹ پٹ کر سکتے ہیں:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("I love you, Petra creation,\n" +
               "I love your stern, slim look,\n" +
               "Neva sovereign current,\n" +
               "Coastal granite");
       String s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
   }
}
ہر بار ہمارا سکینر ایک قدم آگے بڑھے گا اور اگلی لائن پڑھے گا۔ پروگرام کا نتیجہ کنسول میں آؤٹ پٹ ہے:

Люблю тебя, Peterа творенье,
Люблю твой строгий, стройный вид,
Невы державное теченье,
Береговой ее гранит
جیسا کہ ہم پہلے ہی کہہ چکے ہیں، سکینر کے لیے ڈیٹا کا ذریعہ نہ صرف ایک تار ہو سکتا ہے، بلکہ مثال کے طور پر، کنسول بھی ہو سکتا ہے۔ ہمارے لیے اہم خبر: اگر پہلے ہم وہاں صرف ڈیٹا آؤٹ پٹ کرتے تھے، اب ہم کی بورڈ سے ڈیٹا داخل کریں گے! آئیے دیکھتے ہیں کہ سکینر کلاس اور کیا کر سکتی ہے :
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter the number:");

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

   }
}
طریقہ nextInt()درج کردہ نمبر کو پڑھتا اور واپس کرتا ہے۔ ہمارے پروگرام میں، یہ ایک متغیر کو قدر تفویض کرنے کے لیے استعمال ہوتا ہے number۔ یہ ایک حقیقی سکینر کی طرح لگتا ہے! پروگرام صارف سے کسی بھی نمبر کو لائن میں داخل کرنے کو کہتا ہے۔ صارف کے یہ کرنے کے بعد، پروگرام اس کا شکریہ ادا کرتا ہے، کنسول پر اپنے کام کا نتیجہ دکھاتا ہے اور ختم ہوجاتا ہے۔ لیکن ہمارے پاس اب بھی ایک سنگین مسئلہ ہے۔ صارف غلطی کر سکتا ہے اور کچھ غلط درج کر سکتا ہے۔ ہمارا موجودہ پروگرام کب کام کرنا چھوڑ دے گا اس کی ایک مثال یہ ہے:
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter the number:");

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

   }
}
آئیے نمبر کے بجائے سٹرنگ "جاوارش" داخل کرنے کی کوشش کریں: کنسول آؤٹ پٹ:
Enter the number:
JavaRush
Exception in thread "main" java.util.InputMismatchException
  at java.util.Scanner.throwFor(Scanner.java:864)
  at java.util.Scanner.next(Scanner.java:1485)
  at java.util.Scanner.nextInt(Scanner.java:2117)
  at java.util.Scanner.nextInt(Scanner.java:2076)
  at Main.main(Main.java:10)

Process finished with exit code 1
افوہ، سب کچھ خراب ہے -_- اس طرح کے حالات سے بچنے کے لیے، ہمیں صارف کے داخل کردہ ڈیٹا کی توثیق کرنے کا طریقہ تلاش کرنے کی ضرورت ہے۔ مثال کے طور پر، صارف نمبر کے علاوہ کچھ بھی داخل کرتا ہے، کنسول میں انتباہ ظاہر کرنا اچھا ہوگا کہ درج کردہ معلومات نمبر نہیں ہے، اور اگر سب کچھ ترتیب میں ہے تو تصدیقی متن ڈسپلے کریں۔ لیکن ایسا کرنے کے لیے، ہمیں درحقیقت "مستقبل کو دیکھنے" کی ضرورت ہے - معلوم کریں کہ ہمارے بہاؤ میں آگے کیا ہے۔ کیا جاوا میں سکینر ایسا کر سکتا ہے؟ وہ کیسے کر سکتا ہے! اور اس کے لیے اس میں طریقوں کا ایک پورا گروپ ہے: hasNextInt()- طریقہ یہ جانچتا ہے کہ درج کردہ ڈیٹا کا اگلا حصہ نمبر ہے یا نہیں (بالترتیب درست یا غلط لوٹتا ہے)۔ hasNextLine()- چیک کرتا ہے کہ آیا ڈیٹا کا اگلا حصہ سٹرنگ ہے۔ hasNextByte(), hasNextShort(), hasNextLong(), hasNextFloat(), hasNextDouble()- یہ تمام طریقے ڈیٹا کی دوسری اقسام کے لیے بھی ایسا ہی کرتے ہیں۔ آئیے نمبر پڑھنے کے لیے اپنے پروگرام کو تبدیل کرنے کی کوشش کریں:
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter the number:");

       if (sc.hasNextInt()) {
           int number = sc.nextInt();
           System.out.println("Thank you! You entered a number" + number);
       } else {
           System.out.println("Sorry, but this is clearly not a number. Restart the program and try again!");
       }

   }
}
اب ہمارا پروگرام چیک کرتا ہے کہ درج کیا گیا اگلا کریکٹر نمبر ہے یا نہیں۔ اور صرف اس صورت میں جب یہ ہے، یہ ایک تصدیق دکھاتا ہے۔ اگر ان پٹ ٹیسٹ پاس نہیں کرتا ہے، تو پروگرام اس کا نوٹس لے گا اور آپ سے دوبارہ کوشش کرنے کو کہے گا۔ بنیادی طور پر، آپ سکینر آبجیکٹ کے ساتھ بات چیت کر سکتے ہیں اور پہلے سے جان سکتے ہیں کہ کس قسم کے ڈیٹا کی توقع کی جائے۔ "ارے، سکینر، آگے کیا ہے؟ نمبر، تار، یا کچھ اور؟ نمبر؟ اور کون سا - int،، short؟ long" یہ لچک آپ کو صارف کے رویے پر منحصر اپنے پروگرام کی منطق بنانے کا موقع فراہم کرتی ہے۔ ایک اور اہم طریقہ جس پر توجہ دینے کے قابل ہے وہ ہے useDelimiter()۔ یہ طریقہ اس تار کو پاس کیا جاتا ہے جسے آپ حد بندی کے طور پر استعمال کرنا چاہتے ہیں۔ مثال کے طور پر، ہمیں اچانک جاپانی شاعری میں دلچسپی پیدا ہوئی اور عظیم شاعر ماتسو باشو کے کئی ہائیکو پڑھنے کے لیے سکینر استعمال کرنے کا فیصلہ کیا۔ یہاں تک کہ اگر ہمیں ایک اناڑی لائن میں تین مختلف آیات دی جائیں، تو ہم انہیں آسانی سے الگ کر سکتے ہیں اور اچھی طرح سے فارمیٹ کر سکتے ہیں:
public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner("On a Bare Branch" +
               "Raven sits alone.'" +
               "Autumn evening." +
               "''***''" +
               "There's such a moon in the sky,'" +
               "Like a tree cut down at the root:'" +
               "A fresh cut turns white." +
               "''***''" +
               "How the river has overflowed!" +
               "The heron wanders on short legs,'" +
               "Knee-deep in water.");

       scan.useDelimiter("'");

       while (scan.hasNext()) {
           System.out.println(scan.next());
       }

       scan.close();
   }
}
ہم سکینر کلاس کا استعمال ڈیلی میٹر() طریقہ کو لائن سیپریٹر کے طور پر استعمال کرتے ہیں : یہ آنے والے ڈیٹا کو حصوں میں تقسیم کرنے کا ذمہ دار ہے۔ ہمارے معاملے میں، ایک واحد اقتباس ( "'" ) بطور دلیل پاس کیا جاتا ہے اور تاروں کو الگ کرنے کے لیے استعمال کیا جاتا ہے ۔ اس اقتباس کے بعد متن ایک نئی لائن پر ظاہر ہوتا ہے کیونکہ جب لوپ میں ہم ڈیٹا کو پڑھنے کے لیے سسٹم کلاس کا println() طریقہ استعمال کر رہے ہیں ۔ نتیجے کے طور پر، ہمارے پاس کنسول میں ایک خوبصورت آؤٹ پٹ ہوگا، بالکل کتابوں کی طرح:
На голой ветке
Ворон сидит одиноко.
Осенний вечер.

*** 
 
В небе такая луна,
Словно дерево спилено под корень:
Белеет свежий срез.

*** 
 
Как разлилась река!
Цапля бредет на коротких ножках,
По колено в воде.
اسی مثال میں، ایک اور طریقہ ہے جس پر آپ کو یقینی طور پر توجہ دینی چاہیے close()۔ کسی بھی چیز کی طرح جو I/O اسٹریمز کے ساتھ کام کرتی ہے، اسکینر کو کام مکمل ہونے پر بند کر دینا چاہیے تاکہ یہ ہمارے کمپیوٹر کے وسائل کو مزید استعمال نہ کرے۔ طریقہ کبھی نہیں بھولنا close()!
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter the number:");

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

       sc.close();//Now we did everything right!

   }
}
بس! جیسا کہ آپ دیکھ سکتے ہیں، سکینر کلاس استعمال کرنے میں کافی آسان اور بہت مفید ہے! :)
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION