06. డెసిషన్ మేకింగ్ — if, else-if, else & టెర్నరీ ఆపరేటర్ (Decision Making in Java)

☕ Java (Java 21+ LTS) 🟢 Lesson 06 of 25 📂 Part 02: Control Flow & Strings (Page 1 of 5) ⏱️ 22 min read
📌 Covered in this lesson: Railway Junction Analogy · if & if-else Mechanics · else-if Ladder · Nested Conditions · Dangling-Else Ambiguity · Short-Circuit Logic (&&, ||) · Ternary Operator (? :) · 5 Interactive Quizzes

కంప్యూటర్ కేవలం లెక్కలు మాత్రమే చేయదు; క్లిష్ట పరిస్థితులలో మనుషుల కంటే వేగంగా మరియు కచ్చితంగా నిర్ణయాలు తీసుకోగలదు. యూజర్ పాస్‌వర్డ్ సరైనదా కాదా? బ్యాంక్ ఖాతాలో సరిపడా బ్యాలెన్స్ ఉందా లేదా? సరుకును డెలివరీ చేయడానికి పిన్‌కోడ్ చెల్లుబాటు అవుతుందా? ఇలాంటి వేలాది ఎంటర్‌ప్రైజ్ నిర్ణయాలు తీసుకోవడానికి జావా కంట్రోల్ ఫ్లో (Control Flow) స్టేట్‌మెంట్లను అందిస్తుంది.

రైల్వే ట్రాక్ జంక్షన్ & ఎయిర్‌పోర్ట్ ఇమ్మిగ్రేషన్ గేట్ల అనాలజీ (The Railway Junction & Airport Gate Analogy):
1. if Statement (ఒకే సిగ్నల్ చెక్‌పాయింట్): రైలు వెళ్లే మార్గంలో సిగ్నల్ గ్రీన్ అయితేనే ముందుకు వెళ్లనిచ్చే ఒకే ఒక చెక్‌పాయింట్. షరతు నిజమైతేనే (true) ఆ బ్లాక్ లోపలి కోడ్ నడుస్తుంది.
2. if-else (రెండు మార్గాల జంక్షన్ - Two-Way Fork): రైల్వే ట్రాక్ రెండుగా విడిపోయే చోట — సిగ్నల్ పడితే ప్లాట్‌ఫారమ్ 1 వైపు, పడకపోతే తప్పనిసరిగా ప్లాట్‌ఫారమ్ 2 వైపు వెళ్తుంది. ఏదో ఒక మార్గం మాత్రమే ఎంపికవుతుంది.
3. else-if Ladder (ఎయిర్‌పోర్ట్ బోర్డింగ్ లేన్లు - Multi-Tier Priority Lanes): విమానాశ్రయంలో మొదటి లేన్ ఫస్ట్ క్లాస్ పాసెంజర్లకు, రెండవ లేన్ బిజినెస్ క్లాస్‌కు, మూడవ లేన్ ఎకానమీ క్లాస్‌కు, మరియు ఎవరైనా మిగిలితే డిఫాల్ట్ గేట్ (else) కు పంపించినట్లే బహుళ షరతులను క్రమపద్ధతిలో పరీక్షిస్తుంది.
4. Ternary Operator ? : (ఎక్స్‌ప్రెస్ బయోమెట్రిక్ గేట్): చిన్న చిన్న నిర్ణయాల కోసం 4 లైన్ల if-else కోడ్ రాసే అవసరం లేకుండా, ఒకే ఒక్క సెకనులో ఫలితాన్ని రిటర్న్ చేసే ఆధునిక స్మార్ట్ గేట్.

ఈ ఆరవ అధ్యాయంతో మనం Part 02: Control Flow & Strings లోకి అడుగుపెడుతున్నాం! ఈ పాఠంలో షార్ట్-సర్క్యూట్ ఇవాల్యుయేషన్, డ్యాంగ్లింగ్-ఎల్స్ ప్రాబ్లమ్, మరియు పరిశ్రమ స్థాయి ప్రొడక్షన్ డెసిషన్ ఇంజిన్ల రూపకల్పనను నేర్చుకుందాం.

📋 ఈ Page లో ఏముంది? (Contents)

1 కంట్రోల్ ఫ్లో కాన్సెప్ట్ & సీక్వెన్షియల్ ఎగ్జిక్యూషన్

సాధారణంగా ఏదైనా కంప్యూటర్ ప్రోగ్రామ్ పై నుండి కిందికి ఒకదాని తర్వాత ఒకటి లైన్-బై-లైన్ పద్ధతిలో రన్ అవుతుంది (Sequential Execution). కానీ నిజ జీవిత పరిస్థితులలో ప్రతి పని వరుసగా జరగదు. యూజర్ ఇన్‌పుట్, సమయం, లేదా బ్యాంక్ బ్యాలెన్స్ ఆధారంగా కొన్ని కోడ్ బ్లాకులను దాటవేయడం (Skip) లేదా నిర్దిష్ట బ్లాకులను మాత్రమే రన్ చేయడం అవసరమవుతుంది. దీనినే Decision Making (కండిషనల్ బ్రాంచింగ్) అంటారు.

🧭 The Golden Rule of Java Conditions:

సి లేదా సి++ భాషలలో if (1) లేదా if (0) అని పూర్ణాంకాలను షరతులుగా ఇవ్వవచ్చు. కానీ జావాలో ఒక కండిషన్ ఖచ్చితంగా boolean (true లేదా false) గా మాత్రమే మూల్యాంకనం కావాలి! జావాలో if (score = 100) అని అసైన్‌మెంట్ రాస్తే కంపైలర్ తక్షణమే ఎర్రర్ ఇస్తుంది; తప్పనిసరిగా if (score == 100) అని రిలేషనల్ ఈక్వాలిటీ ఆపరేటర్ వాడాలి.

CPU Branch Prediction & Performance: ఆధునిక ప్రాసెసర్లు మీ if-else కోడ్ ఏ వైపు వెళ్తుందో ముందే అంచనా వేస్తాయి (Branch Prediction). తరచుగా జరిగే పరిస్థితులను (Happy Path) మొదట పెట్టడం వల్ల CPU బ్రాంచ్ మిస్-ప్రిడిక్షన్లు తగ్గి అప్లికేషన్ వేగం 15% వరకు పెరుగుతుంది!

2 if మరియు if-else స్టేట్‌మెంట్స్ అనాటమీ

జావాలో డెసిషన్ మేకింగ్ యొక్క ప్రాథమిక భవన నిర్మాణాలు:

స్టేట్‌మెంట్ సింటాక్స్ రూపం పనితీరు నియమం
Simple if if (condition) { // code } షరతు true అయితేనే లోపలి కోడ్ రన్ అవుతుంది. false అయితే బ్లాక్ మొత్తం దాటవేయబడుతుంది.
if-else if (condition) { // true } else { // false } షరతు true అయితే మొదటి బ్లాక్, false అయితే రెండవ (else) బ్లాక్ రన్ అవుతుంది. ఏ ఒక్క సందర్భంలోనూ రెండు బ్లాక్‌లు కలిసి రన్ అవ్వవు!
int accountBalance = 15000;
int withdrawalAmount = 5000;

if (accountBalance >= withdrawalAmount) {
    accountBalance -= withdrawalAmount;
    System.out.println("లావాదేవీ విజయవంతం! మిగిలిన బ్యాలెన్స్: ₹" + accountBalance);
} else {
    System.out.println("ఖాతాలో సరిపడా నిధులు లేవు (Insufficient Funds)!");
}

3 else-if ల్యాడర్: మల్టీ-కండిషన్ బ్రాంచింగ్

రెండు కంటే ఎక్కువ ఎంపికలు లేదా బహుళ శ్రేణులు (Ranges) ఉన్నప్పుడు else-if Ladder ను ఉపయోగిస్తాం. కంపైలర్ పై నుండి కిందికి వరుసగా షరతులను పరీక్షిస్తుంది; ఏ ఒక్క షరతు true అయినా ఆ బ్లాక్‌ను రన్ చేసి మిగిలిన ల్యాడర్ మొత్తాన్ని దాటవేస్తుంది (Exit):

int marks = 85;

if (marks >= 90) {
    System.out.println("గ్రేడ్: A+ (అత్యున్నత ప్రతిభ)");
} else if (marks >= 75) {
    System.out.println("గ్రేడ్: A (డిస్టింక్షన్)");
} else if (marks >= 60) {
    System.out.println("గ్రేడ్: B (ఫస్ట్ క్లాస్)");
} else if (marks >= 35) {
    System.out.println("గ్రేడ్: C (పాస్)");
} else {
    System.out.println("గ్రేడ్: F (పునఃప్రయత్నం అవసరం)");
}

4 నెస్టెడ్ (Nested) if-else స్టేట్‌మెంట్స్

ఒక if బ్లాక్ లేదా else బ్లాక్ లోపల మరొక పూర్తిస్థాయి if-else స్టేట్‌మెంట్‌ను రాయడాన్ని Nested if-else అంటారు. మొదటి షరతు నిజమైతేనే లోపలి రెండవ షరతును పరీక్షించాల్సిన సందర్భాలలో ఇది ఉపయోగపడుతుంది:

🔒 Multi-Factor Authentication Example:

యూజర్ లాగిన్ అయ్యేటప్పుడు మొదట యూజర్‌నేమ్ & పాస్‌వర్డ్ సరైనదా అని చూస్తాం. అది నిజమైతేనే నెస్టెడ్ if లోకి వెళ్లి OTP కరెక్ట్ కాదా అని పరీక్షిస్తాం. పాస్‌వర్డే తప్పు అయితే OTP ని అసలు చెక్ చేయాల్సిన అవసరం లేదు.

5 షార్ట్-సర్క్యూట్ లాజిక్ (&&, ||) తో ఎగ్జిక్యూషన్ ఆప్టిమైజేషన్

జావాలోని తార్కిక ఆపరేటర్లు && (Logical AND) మరియు || (Logical OR) షార్ట్-సర్క్యూట్ మెకానిజంతో పనిచేస్తాయి. అంటే తుది ఫలితం ముందే ఖరారైతే తర్వాతి ఎక్స్‌ప్రెషన్లను JVM లెక్కించకుండా దాటవేస్తుంది:

⚡ Preventing NullPointerException via Short-Circuit:

జావాలో అత్యంత ప్రమాదకరమైన ఎర్రర్ NullPointerException. ఒక ఆబ్జెక్ట్ మెమరీలో ఉందో లేదో తెలియకుండా దాని మెథడ్‌ను కాల్ చేస్తే ప్రోగ్రామ్ క్రాష్ అవుతుంది. షార్ట్-సర్క్యూట్ ద్వారా దీనిని అందంగా నివారించవచ్చు:
• if (user != null && user.getAge() >= 18)
ఒకవేళ user == null అయితే, మొదటి షరతు false అవుతుంది. జావా && కాబట్టి వెంటనే ఆగిపోతుంది. కుడివైపు ఉన్న user.getAge() ని అసలు ముట్టుకోదు! అందువల్ల ఎలాంటి నల్-పాయింటర్ ఎర్రర్ రాదు.

6 డ్యాంగ్లింగ్ ఎల్స్ సమస్య (Dangling-Else Ambiguity & Curly Braces)

కర్లీ బ్రాకెట్లు { } లేకుండా నెస్టెడ్ కండిషన్స్ రాసినప్పుడు ప్రోగ్రామింగ్ భాషల్లో ఏర్పడే ప్రసిద్ధ గందరగోళాన్ని Dangling-Else Problem అంటారు:

// గందరగోళమైన తప్పు కోడ్ (Curly braces లేకుండా):
if (a > 10)
    if (b > 20)
        System.out.println("Both True");
else
    System.out.println("Who do I belong to?"); // మొదటి if కా? రెండవ if కా?

జావా కంపైలర్ నియమం: జావాలో ఒక else ఎల్లప్పుడూ తనకు అత్యంత సమీపంలో ఉన్న (Innermost) if కే జత చేయబడుతుంది. డెవలపర్లు కోడ్ చదివేటప్పుడు తప్పుగా అర్థం చేసుకోకుండా ఉండటానికి ఒకే లైన్ కోడ్ ఉన్నప్పటికీ ఎల్లప్పుడూ కర్లీ బ్రాకెట్స్ { } రాయడం ఇండస్ట్రీ బెస్ట్ ప్రాక్టీస్!

7 Ternary Conditional Operator (? :) డీప్ డైవ్

ఒక వేరియబుల్‌కు షరతు ఆధారంగా విలువను కేటాయించడానికి Ternary Operator (? :) అత్యంత సమర్థవంతమైన షార్ట్‌కట్:

⚡ Ternary Operator vs if-else:

• if-else రూపం (4 లైన్లు):
String message; if (score >= 50) { message = "PASS"; } else { message = "FAIL"; }

• Ternary రూపం (కేవలం 1 లైన్):
String message = (score >= 50) ? "PASS" : "FAIL";

• నెస్టెడ్ టెర్నరీ (హెచ్చరిక): int fee = isStudent ? (hasId ? 50 : 80) : 120; అని రాయవచ్చు కానీ, కోడ్ చదవడం కష్టమయ్యే సందర్భాలలో నెస్టెడ్ టెర్నరీని నివారించి సాధారణ if-else వాడడమే మంచిది.

8 బూలియన్ ఫ్లాగ్స్ & క్లీన్ కోడ్ బెస్ట్ ప్రాక్టీసెస్

పరిశ్రమ ప్రమాణాలతో క్లీన్ కండిషనల్ కోడ్ రాయడానికి గూగుల్ మరియు ఒరాకిల్ ఇంజనీర్లు పాటించే సూత్రాలు:

  • బూలియన్‌ను true తో సరిపోల్చకండి: if (isLoggedIn == true) అని రాయడం బిగినర్ల తప్పు. క్లీన్‌గా if (isLoggedIn) అని మాత్రమే రాయండి.
  • నెగెటివ్ కండిషన్ల కంటే పాజిటివ్ కండిషన్లకు ప్రాధాన్యత ఇవ్వండి: if (!isNotAvailable) వంటి డబుల్ నెగెటివ్‌లు కోడ్ చదివేవారికి తలనొప్పి తెప్పిస్తాయి. if (isAvailable) అని రాయండి.
  • గార్డ్ క్లాజ్ పద్ధతి (Guard Clauses): డీప్ నెస్టెడ్ కోడ్ (ఒక దానిలో మరొకటి 5 లెవల్స్) రాసే బదులు, తప్పు జరిగితే ముందే మెథడ్ నుండి return అయ్యే గార్డ్ క్లాజ్‌లను వాడండి.

9 కోడ్ డెమో 1: స్టూడెంట్ గ్రేడింగ్ & పెర్ఫార్మెన్స్ అనలైజర్

బహుళ సబ్జెక్టుల మార్కులను స్వీకరించి, సగటు లెక్కించి, ల్యాడర్ ద్వారా అకడమిక్ డిస్టింక్షన్ గ్రేడ్‌ను నిర్ణయించే లైవ్ ప్రోగ్రామ్:

StudentGradeAnalyzer.java
public class StudentGradeAnalyzer {
    public static void main(String[] args) {
        String studentName = "భవాని శంకర్";
        int mathMarks    = 92;
        int physicsMarks = 88;
        int chemMarks    = 85;

        int totalMarks = mathMarks + physicsMarks + chemMarks;
        double averagePercentage = totalMarks / 3.0;

        System.out.println("==================================================");
        System.out.println("       ACADEMIC PERFORMANCE & GRADE REPORT       ");
        System.out.println("==================================================");
        System.out.println("Student Name : " + studentName);
        System.out.printf("Total Marks  : %d / 300%n", totalMarks);
        System.out.printf("Average %%    : %.2f%%%n", averagePercentage);
        System.out.println("--------------------------------------------------");

        // else-if Ladder Evaluation
        String finalGrade;
        String meritStatus;

        if (averagePercentage >= 90.0) {
            finalGrade = "A+ (Distinction)";
            meritStatus = "Gold Medal Candidate";
        } else if (averagePercentage >= 75.0) {
            finalGrade = "A (First Class with Honors)";
            meritStatus = "Dean's Honor List";
        } else if (averagePercentage >= 60.0) {
            finalGrade = "B (First Class)";
            meritStatus = "Qualified for Placement";
        } else if (averagePercentage >= 40.0) {
            finalGrade = "C (Pass Class)";
            meritStatus = "Eligible for Graduation";
        } else {
            finalGrade = "F (Failed)";
            meritStatus = "Supplementary Required";
        }

        System.out.println("Final Grade  : " + finalGrade);
        System.out.println("Merit Status : " + meritStatus);
        System.out.println("==================================================");
    }
}
💻 Console Output (StudentGradeAnalyzer)
==================================================
       ACADEMIC PERFORMANCE & GRADE REPORT       
==================================================
Student Name : భవాని శంకర్
Total Marks  : 265 / 300
Average %    : 88.33%
--------------------------------------------------
Final Grade  : A (First Class with Honors)
Merit Status : Dean's Honor List
==================================================

10 కోడ్ డెమో 2: బ్యాంకింగ్ లోన్ ఎలిజిబిలిటీ & క్రెడిట్ స్కోర్ ఎవాల్యుయేటర్

క్రెడిట్ స్కోర్, నెలవారీ ఆదాయం, మరియు ఇప్పటికే ఉన్న ఈఎంఐల నిష్పత్తిని విశ్లేషించే నెస్టెడ్ if-else డెసిషన్ ఇంజిన్:

LoanApprovalEngine.java
public class LoanApprovalEngine {
    public static void main(String[] args) {
        String applicantName = "రాజేష్ వర్మ";
        int cibilScore       = 760;
        double monthlySalary = 65000.0;
        double existingEmis  = 15000.0;
        int age              = 32;

        System.out.println("--------------------------------------------------");
        System.out.println("       HOME LOAN UNDERWRITING & APPROVAL         ");
        System.out.println("--------------------------------------------------");
        System.out.println("Applicant : " + applicantName + " (Age: " + age + ")");
        System.out.println("CIBIL     : " + cibilScore);
        System.out.printf("Salary    : ₹ %,.2f | Existing EMIs: ₹ %,.2f%n", monthlySalary, existingEmis);
        System.out.println("--------------------------------------------------");

        // Multi-tier Nested Decision Structure
        if (age >= 21 && age <= 60) {
            if (cibilScore >= 750) {
                double maxAllowableEmi = monthlySalary * 0.50; // 50% FOIR limit
                double disposableEmi = maxAllowableEmi - existingEmis;

                if (disposableEmi >= 15000.0) {
                    System.out.println("Decision : [APPROVED] Pre-approved Loan Limit: ₹ 45,00,000");
                    System.out.printf("Max EMI  : Up to ₹ %,.2f per month at 8.4%% ROI%n", disposableEmi);
                } else {
                    System.out.println("Decision : [REJECTED] High Debt-to-Income ratio (FOIR exceeded).");
                }
            } else if (cibilScore >= 650) {
                System.out.println("Decision : [MANUAL REVIEW] Requires Co-applicant or Collateral.");
            } else {
                System.out.println("Decision : [REJECTED] Low Credit Score below minimum cutoff (650).");
            }
        } else {
            System.out.println("Decision : [REJECTED] Age not within allowable underwriting bracket.");
        }
        System.out.println("--------------------------------------------------");
    }
}
💻 Console Output (LoanApprovalEngine)
--------------------------------------------------
       HOME LOAN UNDERWRITING & APPROVAL         
--------------------------------------------------
Applicant : రాజేష్ వర్మ (Age: 32)
CIBIL     : 760
Salary    : ₹ 65,000.00 | Existing EMIs: ₹ 15,000.00
--------------------------------------------------
Decision : [APPROVED] Pre-approved Loan Limit: ₹ 45,00,000
Max EMI  : Up to ₹ 17,500.00 per month at 8.4% ROI
--------------------------------------------------

11 కోడ్ డెమో 3: ATM Cash Dispenser & PIN Verification Engine (Capstone Mini Project)

ఒక పూర్తిస్థాయి ఏటీఎం మెషీన్ క్యాష్ ప్రాసెసింగ్ ఇంజిన్: పిన్ నంబర్ సరిచూడడం, కార్డ్ బ్లాక్ కౌంటర్, డైలీ విత్‌డ్రా పరిమితులు, మరియు డినామినేషన్ల లెక్కింపును సమన్వయం చేసే కాప్‌స్టోన్ ప్రాజెక్ట్:

AtmCashDispenserEngine.java
public class AtmCashDispenserEngine {
    public static void main(String[] args) {
        int storedPin         = 4829;
        int enteredPin        = 4829;
        int accountBalance    = 42500;
        int withdrawalRequest = 8500;
        int dailyWithdrawLimit = 25000;
        int dailyWithdrawnToday = 10000;

        System.out.println("==================================================");
        System.out.println("        HYDERABAD METRO BANK ATM DISPENSER        ");
        System.out.println("==================================================");

        // Security Authentication
        if (enteredPin != storedPin) {
            System.out.println("[SECURITY ALERT] Invalid PIN entered! Card session terminated.");
            return;
        }

        System.out.println("[STATUS] PIN Verified. Authenticated Account Holder.");

        // Checking withdrawal validations via Short-circuit & Nested Logic
        if (withdrawalRequest <= 0) {
            System.out.println("[ERROR] Invalid withdrawal amount. Must be greater than 0.");
        } else if (withdrawalRequest % 100 != 0) {
            System.out.println("[ERROR] Amount must be in multiples of ₹ 100 or ₹ 500.");
        } else if (withdrawalRequest > accountBalance) {
            System.out.println("[DECLINED] Insufficient account balance! Current: ₹ " + accountBalance);
        } else if ((dailyWithdrawnToday + withdrawalRequest) > dailyWithdrawLimit) {
            int remainingDailyLimit = dailyWithdrawLimit - dailyWithdrawnToday;
            System.out.println("[DECLINED] Exceeds daily ATM limit! Max remaining today: ₹ " + remainingDailyLimit);
        } else {
            // Dispensing cash
            accountBalance -= withdrawalRequest;
            dailyWithdrawnToday += withdrawalRequest;

            int count500 = withdrawalRequest / 500;
            int count100 = (withdrawalRequest % 500) / 100;

            System.out.println("--------------------------------------------------");
            System.out.println("Transaction Status: [SUCCESS] Cash Dispensed!");
            System.out.printf("  ₹ 500 Currency Notes : %d note(s)%n", count500);
            System.out.printf("  ₹ 100 Currency Notes : %d note(s)%n", count100);
            System.out.println("--------------------------------------------------");
            System.out.printf("  Total Dispensed  : ₹ %,d%n", withdrawalRequest);
            System.out.printf("  Remaining Balance: ₹ %,d%n", accountBalance);
        }
        System.out.println("==================================================");
    }
}
💻 Console Output (AtmCashDispenserEngine)
==================================================
        HYDERABAD METRO BANK ATM DISPENSER        
==================================================
[STATUS] PIN Verified. Authenticated Account Holder.
--------------------------------------------------
Transaction Status: [SUCCESS] Cash Dispensed!
  ₹ 500 Currency Notes : 17 note(s)
  ₹ 100 Currency Notes : 0 note(s)
--------------------------------------------------
  Total Dispensed  : ₹ 8,500
  Remaining Balance: ₹ 34,000
==================================================

12 టాప్ 6 కండిషనల్ మిస్టేక్స్ & 5 క్విజ్‌లు

డెసిషన్ మేకింగ్ కోడ్ రాసేటప్పుడు డెవలపర్లు ఎదుర్కొనే 6 ప్రధాన తప్పులు:

లోపం తప్పు కోడ్ సరిదిద్దిన సరైన విధానం
if కండిషన్ పక్కనే సెమీకోలన్ పెట్టడం if (age >= 18); { doSomething(); } (కండిషన్ తో సంబంధం లేకుండా ఎల్లప్పుడూ రన్ అవుతుంది!) సెమీకోలన్ తీసేయండి: if (age >= 18) { doSomething(); }
స్ట్రింగ్స్‌ను == తో సరిపోల్చడం if (role == "ADMIN") (మెమరీ అడ్రస్ మాత్రమే సరిపోలుస్తుంది) కంటెంట్ సమానత్వానికి if ("ADMIN".equals(role)) వాడాలి.
కర్లీ బ్రాకెట్స్ మిస్ అవ్వడం if (flag) doA(); doB(); // doB ఎల్లప్పుడూ రన్ అవుతుంది ఎల్లప్పుడూ బ్రాకెట్స్ వాడండి: if (flag) { doA(); doB(); }
అసైన్‌మెంట్‌ను కండిషన్‌గా వాడటం if (isPaid = true) (ఇది ఎల్లప్పుడూ true అవుతుంది!) కేవలం if (isPaid) లేదా if (isPaid == true) వాడాలి.
పరిధుల తప్పు వరుస క్రమం else-if లో చిన్న పరిధిని మొదట పెట్టడం (ఉదా: marks > 35 ని marks > 90 కంటే పైన పెట్టడం) ల్యాడర్‌లో ఎల్లప్పుడూ కఠినమైన / పెద్ద పరిధుల నుండి కిందికి రావాలి.
షార్ట్ సర్క్యూట్ లేని బిట్‌వైజ్ ఆపరేటర్ వాడటం if (user != null & user.isValid()) (NPE క్రాష్ వస్తుంది) తప్పనిసరిగా && వాడాలి.

🧠 మీ అవగాహనను పరీక్షించుకోండి (5 Interactive Quizzes):

ప్రశ్న 1: 'if (x = 5)' అని జావాలో రాస్తే ఏమి జరుగుతుంది?

సమాధానం: కంపైల్-టైమ్ ఎర్రర్ వస్తుంది! ఎందుకంటే x = 5 అనేది అసైన్‌మెంట్, దీని ఫలితం పూర్ణాంకం (5). జావాలోని if కండిషన్ కేవలం బూలియన్ (true/false) ను మాత్రమే అంగీకరిస్తుంది.

ప్రశ్న 2: డ్యాంగ్లింగ్ ఎల్స్ (Dangling-Else) సమస్యను ఎలా నివారించవచ్చు?

సమాధానం: ప్రతి if మరియు else బ్లాక్‌కు తప్పనిసరిగా కర్లీ బ్రాకెట్లను { } స్పష్టంగా ఉపయోగించడం ద్వారా ఈ గందరగోళాన్ని 100% నివారించవచ్చు.

ప్రశ్న 3: '&&' ఆపరేటర్‌లో మొదటి కండిషన్ false అయితే రెండవ కండిషన్ రన్ అవుతుందా?

సమాధానం: రన్ అవ్వదు! దీనినే షార్ట్-సర్క్యూట్ మూల్యాంకనం (Short-Circuit Evaluation) అంటారు. ఫలితం ఎలాగూ false అని ఖరారైంది కాబట్టి సమయాన్ని ఆదా చేయడానికి JVM తర్వాతి కోడ్‌ను లెక్కించదు.

ప్రశ్న 4: టెర్నరీ ఆపరేటర్ (? :) ఎన్ని ఆపరాండ్లను తీసుకుంటుంది?

సమాధానం: మూడు (3) ఆపరాండ్లు: 1. కండిషన్, 2. నిజమైతే వచ్చే విలువ, 3. అబద్ధమైతే వచ్చే విలువ.

ప్రశ్న 5: 'if (score >= 50); System.out.println("Pass");' రాస్తే ఏమి జరుగుతుంది?

సమాధానం: స్కోరుతో సంబంధం లేకుండా ఎల్లప్పుడూ "Pass" ప్రింట్ అవుతుంది! ఎందుకంటే if పక్కన పెట్టిన సెమీకోలన్ ; ఆ షరతును అక్కడితోనే ముగించేస్తుంది (Null Statement).

← మునుపటి పాఠం: 05. Operators & Type Casting తర్వాతి పాఠం: 07. switch Statements & Expressions →