IndexOutOfBounds problem

amani • منذ 5 سنوات
import java.util.*;
import java.util.ArrayList; 
public class Shortestdistance {
   public static void main(String[] args) {
   
      Scanner scn = new Scanner(System.in);
      System.out.print("How many points are there?");
      int x=scn.nextInt();
      double ShortestDistances=0.0;
      Point [] points = new Point[x];      
      System.out.println("Enter each point as x y, followed by 'Enter'.");
      for(int i =0; i<points.length; i++)
      {
         points[i] = new Point(scn.nextDouble(), scn.nextDouble());
         scn.nextLine();
      }
      ArrayList<Double> dis = new ArrayList<Double>(x);
      dis =calculateShortestDistances(points);
      for(int i =0; i<dis.size(); i++){
         System.out.println("The shortest Distances is: "+dis.get(i));
      }
   
   }//end main
public static ArrayList<Double> calculateShortestDistances(Point [] p) {// start method calculateShortestDistances
      double distance;
      ArrayList<Double> D = new ArrayList<Double>();
      ArrayList<Double> shortD = new ArrayList<Double>();
      Point temppo;
      for(int i=0; i<p.length; i++)    {//start for 
         for(int k=i+1; k<p.length; k++)    {//start inner for 
            distance= Math.sqrt(Math.pow(p[i].getX()-p[k].getX(),2)+Math.pow(p[i].getY()-p[k].getY(),2));
            D.add(distance);         
         //end inner for
         }
         shortD.add(Min(D));
         
         D.clear();  
      }//end for
      return shortD;
   }
   public static double Min(ArrayList<Double> num){
      double minValue = num.get(0);
      for (int j = 1; j <num.size()-1; j++) {
         if (num.get(j) < minValue ) 
            minValue = num.get(j);
            
      }
      return  minValue; }
   

}//end class

هالكود البسيط مبدئياً راح يتم قراءة الإحداثيات كقيم من المستخدم مثلا اخترنا ٤ احداثيات ولتكن ٢ ١ ، ٩  ٦ ، ٥  ٧  ، ١٥ ٨

مفروض في كل مرة يجيب اقصر مسافة بالنسبة للاحداثي ٢ ١ ف راح يحسب المسافة بين  هالاحداثي وكل القيم الاخرى ويخزنها الاراي ليست D ويجب اقصر مسافة بارسال  D لميثود المينيمم عشان تجيب اقصر مسافة وهكذا 

لكن يوجود مشكلة indexOutOfBounds وما اعرف ايش السبب؟

كلمات دليلية: arraylist java

ساعد بالإجابة

"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."

الإجابات (1)

Mohammad Laif • منذ 5 سنوات

بالعاده هذه المشكله تظهر عند الاستعلام عن عنصر غير موجود في المتسلسلات Array (الـ String يعتبر متسلسله Array ايضاً).

لحلها

  • حاولي تحددي اي من الـ For التي تسببها. قبل الخوض فيها تستطيعي استخدام if الشرطيه لتحديد هل المتسلسله فارغه ام لا, ثم الاتيان بـ For.
  • بعد ذلك سيتضح لكي المتسلسله الفارغه او ان الـ For Loop تقوم بالاستعلام عن عدد يختلف عن حجم المتسلسله.

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !