2014-02-15 4 views
0
import java.util.*; 
import java.lang.*; 
import java.io.*; 


class Ideone{ 
    //start 10:10 pm 

    public static List<point> pointArray = new ArrayList<point>(10); 
    public static TreeMap<Integer, point> pointMap = new TreeMap<Integer, point>(); 

    public static void main(String[] args){ 



     point p1 = new point(-2, -1); 
     point p2 = new point(0,2); 
     point p3 = new point(1,3); 
     point p4 = new point(3,6); 
     point p5 = new point(7,8); 
     point p6 = new point(0,6); 
     point p7 = new point(1,8); 

     //Ideone.addSegment(p1); 
     Ideone.addSegment(p2); 
     Ideone.addSegment(p3); 
     //Ideone.addSegment(p4); 
     //Ideone.addSegment(p5); 
     //Ideone.addSegment(p6); 
     //Ideone.addSegment(p7); 

     Ideone.findMaxSegment(); 
    } 

    public static class point{ 
     private static int start; 
     private static int end; 

     public point(int start, int end){ 
      start = this.start; 
      end = this.end; 
     } 

     public static void setStart(int start){ 
      point.start = start;    
     } 

     public static void setEnd(int end){ 
      point.end = end; 
     } 
    } 

    public static void addSegment(point given){ 
     //An array of points. 
     int len = 0; 

     // if the given point doesn't become part of existing point, add as new element 
     for(int i = 0; i < pointArray.size(); i++){ 
      point temp = pointArray.get(i); 
      if((given.end >= temp.start) && (given.end <= temp.end)){ 

       temp.setStart(given.start); 
       len = temp.end - temp.start; 
       System.out.println(temp.start+ " " + temp.end); 
       pointMap.put(len, temp); 
      }else if(given.start >= temp.end && given.start >= temp.start){ 
       temp.setEnd(given.end); 
       len = temp.end - temp.start; 
       pointMap.put(len, temp); 
       System.out.println(temp.start+ " " + temp.end); 
      }else{ 
       if(pointArray.get(i) == null){ 
        point newPoint = new point(given.start,given.end); 
        pointArray.add(newPoint); 
        len = given.end - given.start; 
        pointMap.put(len, newPoint); 
        System.out.println(given.start+ " " + given.end); 
       }  
      } 
     } 
     //else extend the point. 
    } 

    public static void findMaxSegment(){ 
     point maxLengthPoint = pointMap.lastEntry().getValue(); 
     System.out.println(maxLengthPoint.start + " " + maxLengthPoint.end + " " + pointMap.lastEntry().getKey()); 
    } 

} 

Приведенный выше код предназначен для следующей задачи: Даны начальные и конечные координаты одномерных отрезков. Найдите координаты самого длинного сегмента линии, который может быть сформирован из этих сегментов. Напишите две функции addSegment() и findMaxSegment().Как решить ошибку времени выполнения?

Я получаю сообщение об ошибке, как

Ошибка выполнения

+0

Посмотрите в области видимости переменных. –

+0

Не мог вас достать. Не могли бы вы объяснить больше. Как это исправить? – user3167973

+0

Вы объявляете 'pointArray' и' pointMap' в основном, чтобы он не был распознан в рамках метода. – alfasin

ответ

0
class Ideone{ 
    // declare it above outside main method 
    private static ArrayList<point> pointArray; 
    private static ArrayList<point> pointMap; 

остальной части кода .......

и некоторые у вас есть написать

for(int i = 0; i < pointArray.size(); i++){ 
      point temp = pointArray[i];//wrong 

это неправильно, так как вы пытаетесь получить элемент из массиваList

point temp = pointArray.get(i);//use get method to fetch elements from ArrayList 

и это утверждение также неправильно

pointMap.add(len, temp);//wrong 

должно быть

pointMap.put(len, temp);//use put method to insert element in Hashmap 

, а также

public static void findMaxSegment(){ 
     point maxLengthPoint = pointMap.lastEntry();// this is also wrong since there is no method name lastEntry in map 
     System.out.println(maxLengthPoint.start + " " + maxLengthPoint.end + " " + maxLengthPoint); 
} 
0

Когда переменные объявляются внутри main, они видны только внутри main. Перемещение объявления из main и в класс сам по себе:

class Ideone { 

    private static ArrayList<point> pointArray = new ArrayList<point>(10); 
    private static Map<Integer, point> pointMap = new TreeMap<Integer, point>(); 


    public static void main(String[] args){ 
     ... 
+0

Это сработало. После исправления я получаю ошибку времени выполнения. Не могли бы вы мне помочь, пожалуйста. – user3167973

0

Вы объявили как pointArray и pointMap в основной метод. Они доступны только в рамках этого метода (объем метода). Вы можете объявить их как переменную экземпляра, чтобы они были доступны всем методам класса, объявив их вне основного метода.

class Ideone { 
    private static ArrayList<point> pointArray = new ArrayList<point>(10); 
    private static Map<Integer, point> pointMap = new TreeMap<Integer, point>(); 

    //Methods and stuffs ... 
} 
0

держать эти два из стороны вашего основного метода

private static ArrayList<point> pointArray = new ArrayList<point>(10); 
Map<Integer, point> pointMap = new TreeMap<Integer, point>(); 

и использовать .. это для доступа к нему

for(int i = 0; i < Ideone.pointArray.size(); i++){ 

и для доступа к карте необходимо создать экземпляр класса Ideone, как это

Ideone ideon=new Ideone(); 
ideon.pointMap.put(len, temp);// 
0

Проблема i s, что вы определяете переменные:

pointArray 
pointMap 

в основной метод, который означает, что вы можете использовать их только в этом методе, если вы не передать его другой функции или объекта. Наилучшим решением является определение их как переменные экземпляра, так что-то вроде:

class Ideone{ 
    //start 10:10 pm 
    private static ArrayList<point> pointArray; 
    private static ArrayList<point> pointMap; 
    // Rest of code 
Смежные вопросы