JavaRush /جاوا بلاگ /Random-SD /شروعاتي جاوا پروگرامرز جون غلطيون. حصو 2
articles
سطح

شروعاتي جاوا پروگرامرز جون غلطيون. حصو 2

گروپ ۾ شايع ٿيل
شروعاتي جاوا پروگرامرز جون غلطيون. حصو 1

9. غير جامد طبقن جي طريقن کي سڏڻ main() طريقي مان

ڪنهن به جاوا پروگرام جي داخلا پوائنٽ کي جامد طريقو هجڻ گهرجي 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. String class objects کي ميٿڊ پيٽرول طور استعمال ڪرڻ.

جاوا ۾، هڪ ڪلاس 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(مطلب ڪليڪشن فريم ورڪ ). هيٺ ڏنل مثال 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انٽرفيس کي لاڳو ڪرڻ جي بدران extensionsRunnable keyword استعمال ڪندي . غلطي کي درست ڪرڻ لاء، توهان کي صرف لفظ کي درست ڪرڻ جي ضرورت آهي. غلط مثال:
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 اجزاء شامل ڪرڻ وساريو

AWT هڪ سادي GUI ڊيزائن ماڊل استعمال ڪري ٿو: هر انٽرفيس جو حصو پهريان لازمي طور تي پنهنجي تعمير ڪندڙ استعمال ڪندي ٺاهيو وڃي، ۽ پوءِ add()والدين جزو طريقي سان استعمال ڪندي ايپليڪيشن ونڊو ۾ رکيل هجي. اهڙيء طرح، 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. استعمال ڪندي منع ٿيل readLine() طريقو java.io.DataInputStream ڪلاس جو

جاوا ورزن 1.0 ۾، توهان کي متن جي اسٽرنگ پڙهڻ لاءِ readLine()ڪلاس جو طريقو استعمال ڪرڻو پوندو هو java.io.DataInputStream. جاوا ورزن 1.1 شامل ڪيو I/O ڪلاسز جو هڪ مڪمل سيٽ متن لاءِ I/O آپريشن مهيا ڪرڻ لاءِ: the Readerand 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-bit جي بدران 32-bit رياضي استعمال ڪرڻ ۾ ٿورو نقطو آهي؛ رفتار ۾ فرق اڃا تائين JVM طرفان کائي ويو آهي (ان کان علاوه، جديد پروسيسر ۾ سڀ جزوي نمبر 80-bit پروسيسر جي شڪل ۾ تبديل ڪيا ويا آهن. ڪنهن به آپريشن کان اڳ رجسٽر ٿيو). انهن کي استعمال ڪرڻ جو واحد فائدو 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