1. কনসোল ব্যবহার করে পড়াSystem.in

পূর্ববর্তী পাঠে, আমরা স্ক্রিনে তথ্য প্রদর্শনের জন্য কমান্ডগুলির সাথে পরিচিত হয়েছি। System.outএটি করার জন্য, আমরা অবজেক্ট এবং তার print()এবং println()পদ্ধতি ব্যবহার করেছি । এটা সহজ এবং সুবিধাজনক.

কিন্তু, আপনি সম্ভবত ইতিমধ্যে অনুমান করেছেন, স্ক্রিনে তথ্য প্রদর্শন করা আমাদের জন্য যথেষ্ট নয়। বেশিরভাগ প্রোগ্রামের উদ্দেশ্য ব্যবহারকারীর জন্য দরকারী কিছু করা। এর মানে হল যে ব্যবহারকারীর কীবোর্ড থেকে ডেটা প্রবেশ করতে সক্ষম হওয়ার জন্য এটি প্রায়শই প্রয়োজনীয়।

আউটপুটের ক্ষেত্রে যেমন ছিল, আমাদের কাছে ডেটা ইনপুটের জন্য একটি বিশেষ বস্তু রয়েছে — System.in। কিন্তু, দুর্ভাগ্যবশত আমাদের জন্য, এটা আমাদের পছন্দ মতো সুবিধাজনক নয়। এটি আমাদের কীবোর্ড থেকে একবারে একটি অক্ষর থেকে ডেটা পড়তে দেয়।

এটিতে উন্নতি করার জন্য, আমরা অন্য একটি ক্লাস ব্যবহার করব যেটি, যখন System.inবস্তুর সাথে পেয়ার করা হবে, তখন আমাদের যা প্রয়োজন তা আমাদের দেবে। অনেক দিন ধরে, জাভা প্রতিটি অনুষ্ঠানের জন্য ক্লাস করেছে। এবং আমরা এখন তাদের একজনের সাথে পরিচিত হব।


2. Scannerক্লাস

ক্লাস Scanner(পুরো নাম: java.util.Scanner) বিভিন্ন উৎস থেকে ডেটা পড়তে পারে, যেমন কনসোল, ফাইল এবং ইন্টারনেট। আমরা যদি এটি কীবোর্ড থেকে ডেটা পড়তে চাই, তাহলে আমাদের অবশ্যই বস্তুটিতে System.inএকটি যুক্তি হিসাবে পাস করতে হবে যা ডেটা উত্স হিসাবে কাজ করবে। এবং তারপর স্ক্যানার অবজেক্ট এটি দিয়ে কি করতে হবে তা বের করবে।

একটি বস্তু ব্যবহার করে কীবোর্ড থেকে পড়া Scannerএই মত কিছু দেখাবে:

কোড ব্যাখ্যা
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
আমরা একটি Scannerবস্তু তৈরি করি। আমরা কীবোর্ড থেকে পাঠ্যের একটি লাইন
পড়ি । আমরা কীবোর্ড থেকে একটি সংখ্যা পড়ি ।

এটা সহজ দেখায়, কিন্তু এটা সত্যিই সহজ?

আমি মনে করি আপনার অবশ্যই একগুচ্ছ প্রশ্ন থাকবে এবং এখন আমরা তাদের উত্তর দেব।

কিন্তু প্রথমে, আসুন একটি সম্পূর্ণ প্রোগ্রামের একটি উদাহরণ প্রদর্শন করি যা Scannerক্লাস ব্যবহার করে:

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      String name = console.nextLine();
      int age = console.nextInt();

      System.out.println("Name: " + name);
      System.out.println("Age: " + age);
   }
}

3. একটি Scannerবস্তু তৈরি করা

প্রথম প্রশ্ন হল এই লাইনটা কি Scanner console = new Scanner (System.in);?

এই লাইন বিভ্রান্তিকর হতে পারে, কিন্তু আপনি সব সময় একই জিনিস দেখতে পাবেন. তাই আমরা মনে করি এখানে কী ঘটছে তা ব্যাখ্যা করা গুরুত্বপূর্ণ।

আমরা সাধারণত টেক্সট দিয়ে একটি ভেরিয়েবল কীভাবে তৈরি করি তা স্মরণ করুন:

String str = "text";
একটি স্ট্রিং ভেরিয়েবল ঘোষণা এবং আরম্ভ করা

প্রথমে, আমরা ভেরিয়েবলের প্রকার লিখি ( String), তারপরে এর নাম ( str), এবং সবশেষে, সমান চিহ্নের পরে, আমরা মান লিখি।

আমাদের বিভ্রান্তিকর লাইন আসলে একই:

Scanner console = new Scanner(System.in);
Scannerএকটি পরিবর্তনশীল ঘোষণা এবং আরম্ভ করা

সমান চিহ্নের বাম দিকের সবকিছু হল একটি ভেরিয়েবলের ঘোষণা consoleযার ধরন হল Scanner। আপনি পরিবর্তে এটি s বা scannerএমনকি কল করতে পারে keyboard. তারপর কোড এই মত দেখাবে:

Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();

আমি মনে করি যে সবকিছু অনেক পরিষ্কার করে তোলে।

কিন্তু সমান চিহ্নের ডানদিকের কোডটি একটু বেশি জটিল। আমি এখন উল্লেখ করছি new Scanner(System.in); যে বলেছেন, এখানে অতিপ্রাকৃত কিছুই ঘটছে না।

এই কোডে, আমরা জাভা মেশিনকে বলি: একটি নতুন অবজেক্ট (কীওয়ার্ড new) তৈরি করুন যার ধরন হল , নতুন তৈরি করা অবজেক্টের ডেটা উৎস হিসাবে অবজেক্টে Scanner পাস করা ।System.inScanner

Scannerএই পুরো লাইনটি কার্যকর করার পরে, আমাদের কাছে একটি ভেরিয়েবল থাকবে console যা আমাদের প্রোগ্রাম কীবোর্ড থেকে ডেটা পড়ার জন্য ব্যবহার করবে।


4. পদ্ধতির তালিকা

উপরের উদাহরণে, আমাদের Scanner consoleভেরিয়েবল একটি বস্তুর একটি রেফারেন্স সংরক্ষণ করে Scanner

একটি ভেরিয়েবল দ্বারা উল্লেখ করা একটি বস্তুর মেথড কল করার জন্য, আপনি ভেরিয়েবলের নামের পরে একটি পিরিয়ড লিখুন, তারপরে পদ্ধতির নাম এবং যেকোনো আর্গুমেন্ট লিখুন। কমান্ডের সাধারণ চেহারা নিম্নরূপ:

variable.method(arguments);
একটি ভেরিয়েবল দ্বারা উল্লেখ করা একটি বস্তুর উপর একটি পদ্ধতি কল

উদাহরণ:

System.out.println("Hello");
System.out.println(1);

আপনি যদি কোনো ফাংশনে আর্গুমেন্ট পাস করার পরিকল্পনা না করেন, তাহলে আপনি খালি বন্ধনী লিখবেন:

variable.method();
আর্গুমেন্ট পাস ছাড়া একটি পদ্ধতি কল

উদাহরণ:

System.out.println();

5. কনসোল ইনপুট

যখন আমাদের কাছে একটি Scannerবস্তু থাকে, তখন কীবোর্ড থেকে ডেটা পাওয়া সহজ।

কীবোর্ড থেকে একটি লাইন পড়তে , আপনার এই কমান্ডের প্রয়োজন:

String str = console.nextLine();

যখন প্রোগ্রামটির এক্সিকিউশন এই লাইনে পৌঁছাবে, তখন এটি থামবে এবং ব্যবহারকারীর ডেটা প্রবেশের জন্য অপেক্ষা করবে এবং এন্টার টিপুন। তারপর ব্যবহারকারীর প্রবেশ করা সমস্ত কিছু ভেরিয়েবলে সংরক্ষণ করা হয় str

কীবোর্ড থেকে একটি সংখ্যা পড়তে , আপনার এই কমান্ডের প্রয়োজন:

int number = console.nextInt();

এখানে সবকিছু আগের কমান্ডের মত। যখন প্রোগ্রামটির এক্সিকিউশন এই লাইনে পৌঁছাবে, তখন এটি থামবে এবং ব্যবহারকারীর ডেটা প্রবেশের জন্য অপেক্ষা করবে এবং এন্টার টিপুন। এর পরে, ব্যবহারকারীর প্রবেশ করা সমস্ত কিছু একটি সংখ্যায় রূপান্তরিত হয় এবং ভেরিয়েবলে সংরক্ষণ করা হয় number

যদি ব্যবহারকারী এমন ডেটা প্রবেশ করে যা একটি পূর্ণসংখ্যাতে রূপান্তর করা যায় না, প্রোগ্রামটি একটি ত্রুটি তৈরি করবে এবং প্রস্থান করবে।

কীবোর্ড থেকে একটি ভগ্নাংশ সংখ্যা পড়তে , আপনার এই কমান্ডের প্রয়োজন:

double number = console.nextDouble();

এই বিবৃতিটি পদ্ধতির সাথে খুব মিল , শুধুমাত্র এটি পরীক্ষা করে যে প্রবেশ করা ডেটা একটি সংখ্যায় nextInt()রূপান্তরিত হতে পারে ।double

একটি প্রোগ্রামের উদাহরণ যা কীবোর্ড থেকে দুটি সংখ্যা পড়ে এবং তাদের যোগফল স্ক্রিনে প্রদর্শন করে:

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      int a = console.nextInt();
      int b = console.nextInt();

      System.out.println(a + b);
   }
}
বিঃদ্রঃ

ব্যবহারকারী একটি একক লাইনে বেশ কয়েকটি সংখ্যা লিখতে পারে, তাদের স্পেস দিয়ে আলাদা করে: ক্লাসের পদ্ধতিগুলি Scannerকীভাবে এটি পরিচালনা করতে হয় তা জানে। যে বলেন, প্রোগ্রাম শুধুমাত্র ব্যবহারকারী প্রেস করার পরে সংখ্যা পড়া Enter.



Scanner6. ক্লাসের অন্যান্য পদ্ধতি

যাইহোক, উপরের পদ্ধতিগুলি ক্লাসের Scannerঅফার করা সমস্ত নয়। পদ্ধতির সম্পূর্ণ তালিকা এই মত কিছু দেখায়:

পদ্ধতি বর্ণনা
nextByte()
ডেটা পড়ে এবং এটিকে a তে রূপান্তর করেbyte
nextShort()
ডেটা পড়ে এবং এটিকে a তে রূপান্তর করেshort
nextInt()
ডেটা পড়ে এবং এটিকে একটিতে রূপান্তর করেint
nextLong()
ডেটা পড়ে এবং এটিকে a তে রূপান্তর করেlong
nextFloat()
ডেটা পড়ে এবং এটিকে a তে রূপান্তর করেfloat
nextDouble()
ডেটা পড়ে এবং এটিকে a তে রূপান্তর করেdouble
nextBoolean()
ডেটা পড়ে এবং এটিকে a তে রূপান্তর করেboolean
next()
একটি "টোকেন" পড়ে। টোকেন স্পেস বা এন্টার কী টিপে আলাদা করা হয়
nextLine()
একটি সম্পূর্ণ লাইন পড়ে

এমন কিছু পদ্ধতিও রয়েছে যা আপনাকে ইনপুটটিতে পরবর্তী টোকেনটি আসলে এটি না এনে পরীক্ষা করতে দেয় (এটি পড়ার জন্য কোন পদ্ধতি ব্যবহার করতে হবে তা জানার জন্য)।

পদ্ধতি বর্ণনা
hasNextByte()
একটি আছে byte? ইনপুট একটি রূপান্তর করা যাবে byte?
hasNextShort()
একটি আছে short? ইনপুট একটি রূপান্তর করা যাবে short?
hasNextInt()
একটি আছে int? ইনপুট একটি রূপান্তর করা যাবে int?
hasNextLong()
একটি আছে long? ইনপুট একটি রূপান্তর করা যাবে long?
hasNextFloat()
একটি আছে float? ইনপুট একটি রূপান্তর করা যাবে float?
hasNextDouble()
একটি আছে double? ইনপুট একটি রূপান্তর করা যাবে double?
hasNextBoolean()
একটি আছে boolean? ইনপুট একটি রূপান্তর করা যাবে boolean?
hasNext()
অন্য টোকেন আছে?
hasNextLine()
অন্য লাইন আছে?

7. একটি স্ট্রিং থেকে ডেটা পড়া

আমরা আগে উল্লেখ করেছি যে Scannerক্লাসটি বিভিন্ন উত্স থেকে ডেটা পড়তে পারে। এই উত্সগুলির মধ্যে একটি হল পাঠ্যের একটি স্ট্রিং

এটা এই মত কিছু দেখায়:

String str = "text";
Scanner scanner = new Scanner(str);

অবজেক্ট তৈরি করার সময় , আমরা অবজেক্টের পরিবর্তে Scannerস্ট্রিং এ পাস করি । এবং এখন অবজেক্টটি স্ট্রিং থেকে ডেটা পড়বে। উদাহরণ:strSystem.inscanner

প্রোগ্রাম কোড: ব্যাখ্যা:
import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      String str = "10 20 40 60";
      Scanner scanner = new Scanner(str);
      int a = scanner.nextInt();
      int b = scanner.nextInt();

      System.out.println(a + b);
   }
}




// a == 10; 
// b == 20; 
পর্দার আউটপুট হবে:30