CodeGym /جاوا بلاگ /Random-UR /جاوا سکینر کلاس
John Squirrels
سطح
San Francisco

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

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

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

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

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
ہم نے ایک سکینر آبجیکٹ بنایا ہے، اور اس کا ڈیٹا سورس (متن کی ایک تار) کی وضاحت کی ہے۔ نیکسٹ لائن() طریقہ ڈیٹا سورس تک رسائی حاصل کرتا ہے (کوٹرین کے ساتھ ہمارا متن)، اگلی بغیر پڑھی ہوئی لائن (جو اس معاملے میں پہلی لائن ہے) تلاش کرتا ہے، اور اسے واپس کرتا ہے۔ پھر ہم اسے کنسول پر ڈسپلے کرتے ہیں: کنسول آؤٹ پٹ:

It matters not how strait the gate,
ہم نیکسٹ لائن () کا طریقہ کئی بار استعمال کر سکتے ہیں اور پوری نظم کا اقتباس ظاہر کر سکتے ہیں:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       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);
   }
}
ہر بار، ہمارا سکینر ایک قدم آگے بڑھتا ہے اور اگلی لائن پڑھتا ہے۔ پروگرام کا آؤٹ پٹ ظاہر ہوتا ہے:

It matters not how strait the gate, 
How charged with punishments the scroll, 
I am the master of my fate, 
I am the captain of my soul
جیسا کہ ہم پہلے ہی کہہ چکے ہیں، اسکینر کا ڈیٹا سورس سٹرنگ ہونا ضروری نہیں ہے۔ مثال کے طور پر، یہ کنسول ہو سکتا ہے۔ آپ کے لیے کچھ دلچسپ خبریں: پہلے، ہم صرف وہاں ڈیٹا ڈسپلے کرتے تھے، لیکن اب ہم کی بورڈ سے ڈیٹا پڑھیں گے! آئیے دیکھتے ہیں کہ سکینر کلاس اور کیا کرتی ہے:
public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

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

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
آئیے نمبر کے بجائے سٹرنگ "CodeGym" درج کرنے کی کوشش کریں: کنسول آؤٹ پٹ:
Enter a number:
CodeGym 
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 a number:");

       if (sc.hasNextInt()) {
           int number = sc.nextInt();
           System.out.println("Thanks! You entered the 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 withered branch'" +
               "A crow has alighted.'" +
               "Nightfall in autumn." +
               "''***''" +
               "Such a moon above,'" +
               "Like a tree cut at the root:'" +
               "he fresh cut is white." +
               "''***''" +
               "How the river floods!'" +
               "A heron wanders on short legs,'" +
               "Knee-deep in the water.");

       scan.useDelimiter("'");

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

       scan.close();
   }
}
ہم اپنے حد بندی کے طور پر "\ n /*/*/*" (نئے لائن کریکٹر اور تین ستارے) استعمال کرتے ہیں۔ نتیجے کے طور پر، ہمارے پاس خوبصورت کنسول آؤٹ پٹ ہے، بالکل کتابوں کی طرح:
On a withered branch 
A crow has alighted. 
Nightfall in autumn. 

*** 

Such a moon above, 
Like a tree cut at the root: 
The fresh cut is white. 

*** 

How the river floods! 
A heron wanders on short legs, 
Knee-deep in the water.
اس مثال میں ایک اور طریقہ ہے جس کی ہمیں بالکل نشاندہی کرنی چاہیے: close() ۔ I/O اسٹریمز کے ساتھ کام کرنے والی کسی بھی چیز کی طرح، سکینر کو بند کر دینا چاہیے جب یہ ہو جائے تاکہ یہ کمپیوٹر کے وسائل کو استعمال کرنا بند کر دے۔ بند () طریقہ کو کبھی نہ بھولیں !
public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

       sc.close(); // Now we've done everything right!

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