JavaRush /جاوا بلاگ /Random-UR /ابتدائی جاوا پروگرامرز کی غلطیاں۔ حصہ 2
articles
سطح

ابتدائی جاوا پروگرامرز کی غلطیاں۔ حصہ 2

گروپ میں شائع ہوا۔
ابتدائی جاوا پروگرامرز کی غلطیاں۔ حصہ 1

9. مین () طریقہ سے غیر جامد کلاس طریقوں کو کال کرنا

کسی بھی جاوا پروگرام کا انٹری پوائنٹ ایک جامد طریقہ ہونا چاہیے main:
ابتدائی جاوا پروگرامرز کی غلطیاں۔  حصہ 2 - 1
public static void main(String[] args) {
  ...
}
چونکہ یہ طریقہ جامد ہے، اس لیے آپ اس سے غیر جامد کلاس طریقوں کو کال نہیں کر سکتے۔ طلباء اکثر اس کے بارے میں بھول جاتے ہیں اور کلاس کی مثال بنائے بغیر طریقوں کو کال کرنے کی کوشش کرتے ہیں۔ یہ غلطی عموماً تربیت کے بالکل شروع میں ہوتی ہے، جب طلباء چھوٹے پروگرام لکھتے ہیں۔ غلط مثال:
public class DivTest {
    boolean divisible(int x, int y) {
        return (x % y == 0);
    }

    public static void main(String[] args) {
        int v1 = 14;
        int v2 = 9;

        // на следующие строки компилятор выдаст ошибку
        if (divisible(v1, v2)) {
            System.out.println(v1 + " is a multiple of " + v2);
        } else {
            System.out.println(v2 + " does not divide " + v1);
        }
    }
}
غلطی کو ٹھیک کرنے کے 2 طریقے ہیں: مطلوبہ طریقہ کو جامد بنائیں یا کلاس کی ایک مثال بنائیں۔ صحیح طریقہ کا انتخاب کرنے کے لیے، اپنے آپ سے پوچھیں کہ آیا یہ طریقہ فیلڈ کا استعمال کرتا ہے یا دوسرے طبقاتی طریقے۔ اگر ہاں، تو آپ کو کلاس کی ایک مثال بنانا چاہیے اور اس پر ایک طریقہ کال کرنا چاہیے، ورنہ آپ کو طریقہ کو جامد بنانا چاہیے۔ درست مثال 1:
public class DivTest {
    int modulus;

    public DivTest(int m) {
      modulus = m;
    }

    boolean divisible(int x) {
        return (x % modulus == 0);
    }

    public static void main(String[] args) {
        int v1 = 14;
        int v2 = 9;

        DivTest tester = new DivTest(v2);

        if (tester.divisible(v1) {
            System.out.println(v1 + " is a multiple of " + v2);
        } else {
            System.out.println(v2 + " does not divide " + v1);
        }
    }
}
درست مثال 2:
public class DivTest {
    static boolean divisible(int x, int y) {
        return (x % y == 0);
    }

    public static void main(String[] args) {
        int v1 = 14;
        int v2 = 9;

        if (divisible(v1, v2)) {
            System.out.println(v1 + " is a multiple of " + v2);
        } else {
            System.out.println(v2 + " does not divide " + v1);
        }
    }
}

10. سٹرنگ کلاس آبجیکٹ کو میتھڈ پیرامیٹرز کے طور پر استعمال کرنا۔

جاوا میں، ایک کلاس java.lang.Stringسٹرنگ ڈیٹا کو اسٹور کرتی ہے۔ تاہم، جاوا میں تار
  1. مستقل مزاجی ہے (یعنی انہیں تبدیل نہیں کیا جا سکتا)
  2. اشیاء ہیں.
لہذا، ان کو صرف ایک کریکٹر بفر کے طور پر نہیں سمجھا جا سکتا؛ وہ ناقابل تغیر اشیاء ہیں۔ بعض اوقات طالب علم اس غلط توقع میں سٹرنگ پاس کرتے ہیں کہ سٹرنگ آبجیکٹ کو ایک کریکٹر اری کے طور پر حوالہ کے ذریعے پاس کیا جائے گا (جیسا کہ C یا C++ میں)۔ مرتب کرنے والا عام طور پر اسے غلطی نہیں سمجھتا۔ غلط مثال۔
public static void main(String args[]) {
   String test1 = "Today is ";
   appendTodaysDate(test1);
   System.out.println(test1);
}

/* прим. редактора: закомментированный метод должен иметь модификатор
    static (здесь автором допущена ошибка №9)
public void appendTodaysDate(String line) {
    line = line + (new Date()).toString();
}
*/

public static void appendTodaysDate(String line) {
    line = line + (new Date()).toString();
}
اوپر دی گئی مثال میں، طالب علم ایک طریقہ میں test1پیرامیٹر کو ایک نئی قدر تفویض کر کے مقامی متغیر کی قدر کو تبدیل کرنا چاہتا ہے ۔ قدرتی طور پر یہ کام نہیں کرے گا۔ معنی بدل جائیں گے لیکن معنی وہی رہیں گے۔ یہ غلطی ایک غلط فہمی کی وجہ سے ہوتی ہے کہ (1) جاوا آبجیکٹ ہمیشہ حوالہ سے گزرتے ہیں اور (2) جاوا میں تاریں ناقابل تغیر ہیں۔ آپ کو یہ سمجھنے کی ضرورت ہے کہ سٹرنگ آبجیکٹ کبھی بھی اپنی قدر نہیں بدلتے ہیں، اور سٹرنگز پر تمام آپریشنز ایک نئی آبجیکٹ بناتے ہیں۔ اوپر دی گئی مثال میں غلطی کو ٹھیک کرنے کے لیے، آپ کو یا تو طریقہ سے ایک سٹرنگ واپس کرنے کی ضرورت ہے، یا کسی چیز کو پیرامیٹر کے طور پر طریقہ کی بجائے پاس کرنا ہوگا ۔ درست مثال 1:lineappendTodaysDatelinetest1StringBufferString
public static void main(String args[]) {
   String test1 = "Today is ";
   test1 = appendTodaysDate(test1);
   System.out.println(test1);
}

public static String appendTodaysDate(String line) {
    return (line + (new Date()).toString());
}
درست مثال 2:
public static void main(String args[]) {
   StringBuffer test1 = new StringBuffer("Today is ");
   appendTodaysDate(test1);
   System.out.println(test1.toString());
}

public static void appendTodaysDate(StringBuffer line) {
    line.append((new Date()).toString());
}

تقریبا. ترجمہ
دراصل، یہ سمجھنا اتنا آسان نہیں ہے کہ غلطی کیا ہے۔ چونکہ اشیاء کو حوالہ کے ذریعے منتقل کیا جاتا ہے، اس کا مطلب ہے کہ lineاس سے مراد وہی جگہ ہے test1۔ اس کا مطلب یہ ہے کہ ایک نیا بنا کر line، ہم ایک نیا بناتے ہیں test1۔ غلط مثال میں، سب کچھ ایسا لگتا ہے جیسے ٹرانسفر Stringقدر کے لحاظ سے ہے، حوالہ سے نہیں۔

11. ایک کنسٹرکٹر کو ایک طریقہ قرار دینا

جاوا میں آبجیکٹ کنسٹرکٹرز ظاہری شکل میں باقاعدہ طریقوں سے ملتے جلتے ہیں۔ فرق صرف یہ ہے کہ کنسٹرکٹر واپسی کی قیمت کی قسم کی وضاحت نہیں کرتا ہے اور نام کلاس کے نام کی طرح ہے۔ بدقسمتی سے، جاوا طریقہ کا نام کلاس کے نام جیسا ہی رہنے دیتا ہے۔ ذیل کی مثال میں، طالب علم Vector listکلاس بناتے وقت کلاس فیلڈ کو شروع کرنا چاہتا ہے۔ ایسا نہیں ہوگا کیونکہ ایک طریقہ 'IntList'کنسٹرکٹر نہیں ہے۔ غلط مثال۔
public class IntList {
    Vector list;

    // Выглядит How конструктор, но на самом деле это метод
    public void IntList() {
        list = new Vector();
    }

    public append(int n) {
        list.addElement(new Integer(n));
    }
}
NullPointerExceptionپہلی بار فیلڈ تک رسائی حاصل کرنے پر کوڈ ایک استثنا دے گا list۔ غلطی کو ٹھیک کرنا آسان ہے: آپ کو صرف طریقہ ہیڈر سے واپسی کی قیمت کو ہٹانے کی ضرورت ہے۔ درست مثال:
public class IntList {
    Vector list;

    // Это конструктор
    public IntList() {
        list = new Vector();
    }

    public append(int n) {
        list.addElement(new Integer(n));
    }
}

12. مطلوبہ قسم پر کسی چیز کو کاسٹ کرنا بھول گئے۔

دیگر تمام آبجیکٹ پر مبنی زبانوں کی طرح، جاوا میں آپ کسی آبجیکٹ کو اس کے سپر کلاس کے طور پر حوالہ دے سکتے ہیں۔ اسے کہتے ہیں 'upcasting'، یہ جاوا میں خود بخود ہو جاتا ہے۔ تاہم، اگر ایک متغیر، کلاس فیلڈ، یا طریقہ کی واپسی کی قدر کو بطور سپر کلاس قرار دیا جاتا ہے، تو ذیلی طبقے کے فیلڈز اور طریقے پوشیدہ ہوں گے۔ سپر کلاس کا حوالہ دیتے ہوئے بطور ذیلی کلاس کہا جاتا ہے 'downcasting'، آپ کو اسے خود رجسٹر کرنے کی ضرورت ہے (یعنی آبجیکٹ کو مطلوبہ ذیلی طبقے میں لے آئیں)۔ طلباء اکثر کسی چیز کو ذیلی کلاس کرنا بھول جاتے ہیں۔ یہ اکثر اس وقت ہوتا ہے جب کسی پیکیج سے اشیاء اورjava.util مجموعوں کی صفوں کا استعمال کرتے ہوئے (جس کا مطلب ہے Collection Framework )۔ نیچے دی گئی مثال Stringکسی شے کو ایک صف میں ڈالتی ہے اور پھر اسے دوسرے سٹرنگ سے موازنہ کرنے کے لیے اسے صف سے ہٹا دیتی ہے۔ مرتب کرنے والا ایک غلطی کا پتہ لگائے گا اور کوڈ کو مرتب نہیں کرے گا جب تک کہ ایک قسم کاسٹ واضح طور پر متعین نہ ہو۔ غلط مثال۔
Object arr[] = new Object[10];
arr[0] = "m";
arr[1] = new Character('m');

String arg = args[0];
if (arr[0].compareTo(arg) < 0) {
    System.out.println(arg + " comes before " + arr[0]);
}
قسم کاسٹنگ کا معنی کچھ لوگوں کے لیے مشکل ہے۔ متحرک طریقے خاص طور پر اکثر مشکلات کا باعث بنتے ہیں۔ equalsاوپر دی گئی مثال میں، اگر اس کے بجائے طریقہ استعمال کیا جاتا تو compareTo، مرتب کرنے والے نے غلطی نہ کی ہوتی، اور کوڈ صحیح طریقے سے کام کرتا، کیونکہ equalsکلاس کا طریقہ کہا جاتا String۔ آپ کو یہ سمجھنے کی ضرورت ہے کہ ڈائنامک لنکنگ اس سے مختلف ہے downcasting۔ درست مثال:
Object arr[] = new Object[10];
arr[0] = "m";
arr[1] = new Character('m');

String arg = args[0];
if ( ((String) arr[0]).compareTo(arg) < 0) {
    System.out.println(arg + " comes before " + arr[0]);
}

13. انٹرفیس استعمال کرنا۔

بہت سے طلباء کے لیے، کلاسز اور انٹرفیس کے درمیان فرق پوری طرح واضح نہیں ہے۔ لہذا، کچھ طلباء انٹرفیس کو لاگو کرنے کی کوشش کرتے ہیں جیسے کہ Observerانفارمیشنز کی بجائے توسیعیRunnable کلیدی لفظ استعمال کرتے ہیں ۔ غلطی کو درست کرنے کے لیے، آپ کو صرف مطلوبہ لفظ کو درست کرنے کی ضرورت ہے۔ غلط مثال:
public class SharkSim extends Runnable {
    float length;
    ...
}
درست مثال:
public class SharkSim implements Runnable {
    float length;
    ...
}
متعلقہ خرابی: بلاکس کو توسیع اور لاگو کرنے کی غلط ترتیب ۔ جاوا تصریح کے مطابق، انٹرفیس کے نفاذ کے اعلانات سے پہلے کلاس ایکسٹینشن ڈیکلریشن آنا ضروری ہے۔ اس کے علاوہ، انٹرفیسز کے لیے، امپلیپس کی ورڈ کو صرف ایک بار لکھنے کی ضرورت ہے؛ متعدد انٹرفیس کوما کے ذریعے الگ کیے گئے ہیں۔ کچھ اور غلط مثالیں:
// Неправильный порядок
public class SharkSim implements Swimmer extends Animal {
    float length;
    ...
}

// ключевое слово implements встречается несколько раз
public class DiverSim implements Swimmer implements Runnable {
    int airLeft;
    ...
}
درست مثالیں:
// Правильный порядок
public class SharkSim extends Animal implements Swimmer {
    float length;
    ...
}

// Несколько интерфейсов разделяются запятыми
public class DiverSim implements Swimmer, Runnable {
    int airLeft;
    ...
}

14. سپر کلاس طریقہ کی واپسی کی قیمت استعمال کرنا بھول گئے۔

جاوا آپ کو مطلوبہ الفاظ کے مطلوبہ الفاظ کا استعمال کرتے ہوئے ذیلی کلاس سے اسی طرح کے سپر کلاس طریقہ کو کال کرنے کی اجازت دیتا ہے۔ بعض اوقات طلباء کو سپر کلاس طریقوں کو کال کرنا پڑتا ہے، لیکن اکثر واپسی کی قیمت استعمال کرنا بھول جاتے ہیں۔ یہ خاص طور پر اکثر ان طلباء میں ہوتا ہے جو ابھی تک طریقوں اور ان کی واپسی کی قدروں کو نہیں سمجھتے ہیں۔ ذیل کی مثال میں، ایک طالب علم ذیلی طبقے کے طریقہ کار toString()کے نتیجے میں سپر کلاس طریقہ کا نتیجہ داخل کرنا چاہتا ہے۔ toString()تاہم، یہ سپر کلاس طریقہ کی واپسی کی قیمت کا استعمال نہیں کرتا ہے۔ غلط مثال:
public class GraphicalRectangle extends Rectangle {
      Color fillColor;
      boolean beveled;
      ...
      public String toString() {
          super();
          return("color=" + fillColor + ", beveled=" + beveled);
      }
}
غلطی کو درست کرنے کے لیے، عام طور پر مقامی متغیر کو واپسی کی قیمت تفویض کرنا کافی ہوتا ہے، اور پھر ذیلی طبقے کے طریقہ کار کے نتیجے کا حساب لگاتے وقت اس متغیر کا استعمال کریں۔ درست مثال:
public class GraphicalRectangle extends Rectangle {
      Color fillColor;
      boolean beveled;
      ...
      public String toString() {
          String rectStr = super();
          return(rectStr + " - " +
         "color=" + fillColor + ", beveled=" + beveled);
      }
}

15. AWT اجزاء شامل کرنا بھول گئے۔

add()AWT ایک سادہ GUI ڈیزائن ماڈل استعمال کرتا ہے: ہر انٹرفیس جزو کو پہلے اس کے اپنے کنسٹرکٹر کا استعمال کرتے ہوئے بنایا جانا چاہیے، اور پھر بنیادی جزو کے طریقہ کار کا استعمال کرتے ہوئے ایپلیکیشن ونڈو میں رکھا جانا چاہیے۔ اس طرح، AWT پر انٹرفیس ایک درجہ بندی کا ڈھانچہ حاصل کرتا ہے۔ طلباء کبھی کبھی ان 2 مراحل کو بھول جاتے ہیں۔ وہ ایک جزو بناتے ہیں لیکن اسے توسیع کی کھڑکی میں رکھنا بھول جاتے ہیں۔ یہ تالیف کے مرحلے میں غلطیوں کا سبب نہیں بنے گا؛ جزو صرف ایپلی کیشن ونڈو میں ظاہر نہیں ہوگا۔ غلط مثال۔
public class TestFrame extends Frame implements ActionListener {
    public Button exit;

    public TestFrame() {
        super("Test Frame");
        exit = new Button("Quit");
    }
}
اس خرابی کو ٹھیک کرنے کے لیے، آپ کو صرف اجزاء کو ان کے والدین میں شامل کرنے کی ضرورت ہے۔ ذیل میں دی گئی مثال سے پتہ چلتا ہے کہ یہ کیسے کریں۔ واضح رہے کہ اکثر ایک طالب علم جو ایپلی کیشن ونڈو میں ایک جزو شامل کرنا بھول جاتا ہے وہ اس جزو کو ایونٹ کے سامعین کو تفویض کرنا بھی بھول جاتا ہے۔ درست مثال:
public class TestFrame extends Frame implements ActionListener {
    public Button exit;

    public TestFrame() {
        super("Test Frame");

        exit = new Button("Quit");

        Panel controlPanel = new Panel();
        controlPanel.add(exit);

        add("Center", controlPanel);

        exit.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        System.exit(0);
    }
}

17. سلسلہ شروع کرنا بھول گئے۔

جاوا میں ملٹی تھریڈنگ کا استعمال کرتے ہوئے لاگو کیا جاتا ہے java.lang.Thread۔ ایک دھاگے کا لائف سائیکل 4 مراحل پر مشتمل ہوتا ہے: شروع، شروع، بلاک اور بند۔ نیا بنایا گیا تھریڈ ابتدائی حالت میں ہے۔ اسے چلنے والی حالت میں ڈالنے کے لیے، آپ کو اس کو کال کرنا ہوگا start()۔ بعض اوقات طلباء تھریڈ بناتے ہیں لیکن انہیں شروع کرنا بھول جاتے ہیں۔ عام طور پر غلطی اس وقت ہوتی ہے جب طالب علم کے پاس متوازی پروگرامنگ اور ملٹی تھریڈنگ کے بارے میں ناکافی معلومات ہوتی ہیں۔ (تقریباً ترجمہ: مجھے کنکشن نظر نہیں آ رہا ہے) غلطی کو ٹھیک کرنے کے لیے، آپ کو صرف تھریڈ شروع کرنے کی ضرورت ہے۔ نیچے دی گئی مثال میں، ایک طالب علم انٹرفیس کا استعمال کرتے ہوئے تصویر کی اینیمیشن بنانا چاہتا ہے Runnable، لیکن وہ تھریڈ شروع کرنا بھول گیا۔ غلط مثال
public class AnimCanvas extends Canvas implements Runnable {
        protected Thread myThread;
        public AnimCanvas() {
                myThread = new Thread(this);
        }

        // метод run() не будет вызван,
        // потому что поток не запущен.
        public void run() {
                for(int n = 0; n < 10000; n++) {
                   try {
                     Thread.sleep(100);
                   } catch (InterruptedException e) { }

                   animateStep(n);
                }
        }
        ...
}
درست مثال:
public class AnimCanvas extends Canvas implements Runnable {
        static final int LIMIT = 10000;
        protected Thread myThread;

        public AnimCanvas() {
                myThread = new Thread(this);
                myThread.start();
        }

        public void run() {
                for(int n = 0; n < LIMIT; n++) {
                        try {
                          Thread.sleep(100);
                        } catch (InterruptedException e) { }

                        animateStep(n);
                }
        }
        ...
}
تھریڈ کا لائف سائیکل اور تھریڈز اور کلاسز کے درمیان تعلق جو انٹرفیس کو لاگو کرتے ہیں Runnableجاوا پروگرامنگ کا ایک بہت اہم حصہ ہے، اور اس پر توجہ مرکوز کرنا مفید ہوگا۔

18. java.io.DataInputStream کلاس کا ممنوعہ ریڈ لائن () طریقہ استعمال کرنا

جاوا ورژن 1.0 میں، آپ کو متن کی ایک تار کو پڑھنے کے لیے readLine()کلاس کا طریقہ استعمال کرنا پڑا java.io.DataInputStream۔ جاوا ورژن 1.1 نے متن کے لیے I/O آپریشنز فراہم کرنے کے لیے I/O کلاسز کا ایک مکمل سیٹ شامل کیا: the Readerاور Writer۔ اس طرح، متن کی ایک سطر کو پڑھنے کے لیے ورژن 1.1 سے، آپ کو readLine()کلاس کا طریقہ استعمال کرنا چاہیے java.io.BufferedReader۔ طلباء اس تبدیلی سے واقف نہیں ہوسکتے ہیں، خاص طور پر اگر انہیں پرانی کتابوں سے پڑھایا گیا ہو۔ (تقریباً ترجمہ: درحقیقت اب مزید متعلقہ نہیں ہے۔ اس بات کا امکان نہیں ہے کہ اب کوئی ان کتابوں سے مطالعہ کرے گا جو 10 سال پرانی تھیں)۔ readLine()JDK میں پرانا طریقہ باقی ہے، لیکن اسے غیر قانونی قرار دیا جاتا ہے، جو اکثر طلباء کو الجھا دیتا ہے۔ آپ کو جو سمجھنے کی ضرورت ہے وہ یہ ہے کہ readLine()کلاس کا طریقہ استعمال کرنا java.io.DataInputStreamغلط نہیں ہے، یہ بالکل پرانا ہے۔ آپ کو کلاس کا استعمال کرنا چاہیے BufferedReader۔ غلط مثال:
public class LineReader {
    private DataInputStream dis;

    public LineReader(InputStream is) {
        dis = new DataInputStream(is);
    }

    public String getLine() {
        String ret = null;

        try {
          ret = dis.readLine();  // Неправильно! Запрещено.
        } catch (IOException ie) { }

        return ret;
    }
}
درست مثال:
public class LineReader {
    private BufferedReader br;

    public LineReader(InputStream is) {
        br = new BufferedReader(new InputStreamReader(is));
    }

    public String getLine() {
        String ret = null;

        try {
          ret = br.readLine();
        } catch (IOException ie) { }

        return ret;
    }
}
1.0 کے بعد کے ورژن میں دوسرے ممنوع طریقے ہیں، لیکن یہ سب سے عام ہے۔

19. فلوٹ کے طور پر ڈبل استعمال کرنا

زیادہ تر دوسری زبانوں کی طرح، جاوا فلوٹنگ پوائنٹ نمبرز (فرکشنل نمبرز) پر کارروائیوں کی حمایت کرتا ہے۔ جاوا میں فلوٹنگ پوائنٹ نمبرز کے لیے دو قدیم قسمیں ہیں: doubleIEEE 64-bit precision، اور floatIEEE 32-bit precision۔ مشکل اس وقت ہوتی ہے جب اعشاریہ نمبر استعمال کریں جیسے کہ 1.75، 12.9e17 یا -0.00003 - مرتب کرنے والا انہیں ٹائپ کرنے کے لیے تفویض کرتا ہے double۔ جاوا آپریشنز میں ٹائپ کاسٹ نہیں کرتا ہے جہاں درستگی کا نقصان ہوسکتا ہے۔ اس قسم کی کاسٹنگ پروگرامر کے ذریعہ کی جانی چاہئے۔ مثال کے طور پر، جاوا آپ کو ٹائپ کاسٹ کے بغیر ٹائپ intویری ایبل کو ٹائپ ویلیو تفویض کرنے کی اجازت نہیں دے گا byte، جیسا کہ ذیل کی مثال میں دکھایا گیا ہے۔
byte byteValue1 = 17; /* неправильно! */
byte byteValue2 = (byte)19; /* правильно */
چونکہ فریکشنل نمبرز کی نمائندگی قسم کے ذریعے کی جاتی ہے double، اور doubleقسم کے متغیر کو تفویض کرنا floatدرستگی کے نقصان کا باعث بن سکتا ہے، اس لیے مرتب کرنے والا فریکشنل نمبرز کو بطور استعمال کرنے کی کسی بھی کوشش کے بارے میں شکایت کرے گا float۔ لہذا ذیل میں اسائنمنٹس کا استعمال کلاس کو مرتب کرنے سے روک دے گا۔
float realValue1 = -1.7;          /* неправильно! */
float realValue2 = (float)(-1.9); /* правильно */
یہ اسائنمنٹ C یا C++ میں کام کرے گی، لیکن جاوا میں یہ زیادہ سخت ہے۔ اس غلطی سے چھٹکارا حاصل کرنے کے 3 طریقے ہیں۔ آپ ٹائپ doubleکے بجائے استعمال کر سکتے ہیں float۔ یہ سب سے آسان حل ہے۔ درحقیقت، 64 بٹ کے بجائے 32 بٹ ریاضی کے استعمال میں کوئی فائدہ نہیں؛ رفتار میں فرق اب بھی JVM کھا جاتا ہے (اس کے علاوہ، جدید پروسیسر میں تمام فریکشنل نمبرز کو 80 بٹ پروسیسر کی شکل میں تبدیل کیا جاتا ہے۔ کسی بھی آپریشن سے پہلے رجسٹر کریں)۔ ان کے استعمال کا واحد فائدہ floatیہ ہے کہ وہ کم میموری لیتے ہیں، جو کہ بڑی تعداد میں فریکشنل متغیر کے ساتھ کام کرتے وقت مفید ہے۔ آپ مرتب کرنے والے کو نمبر کو ذخیرہ کرنے کا طریقہ بتانے کے لیے نمبر ٹائپ موڈیفائر استعمال کر سکتے ہیں۔ قسم کے لیے ترمیم float - 'f'کنندہ اس طرح، مرتب کرنے والا ٹائپ 1.75 کو تفویض کرے گا double، اور 1.75f - float. مثال کے طور پر:
float realValue1 = 1.7;    /* неправильно! */
float realValue2 = 1.9f;   /* правильно */
آپ واضح قسم کاسٹنگ استعمال کر سکتے ہیں۔ یہ سب سے کم خوبصورت طریقہ ہے، لیکن یہ مفید ہے جب کسی قسم کے متغیر کو doubleقسم میں تبدیل کریں float۔ مثال:
float realValue1 = 1.7f;
double realValue2 = 1.9;
realValue1 = (float)realValue2;
آپ یہاں اور یہاں فلوٹنگ پوائنٹ نمبرز کے بارے میں مزید پڑھ سکتے ہیں۔

-- مترجم کا تبصرہ --
بس۔
مثال 10 میں، غلطی 9 اصل میں کی گئی تھی۔ میں نے اسے فوراً محسوس کیا، لیکن ایک نوٹ لکھنا بھول گیا۔ لیکن درست نہیں کیا تاکہ اصل ماخذ سے کوئی تضاد نہ ہو۔

مصنف: A. Grasoff™ ماخذ سے لنک: ابتدائی جاوا پروگرامرز کی غلطیاں
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION