2016-09-12 4 views
0

Trying to sort an array of objects by overallVisits from greatest to smallest but get an error. The goal is to pass in website objects to the array then have them sorted out according to greatest overall visit to least visit. I get the following error: Exception in thread "main" java.lang.NullPointerException at java.util.ComparableTimSort.binarySort(ComparableTimSort.java:258) at java.util.ComparableTimSort.sort(ComparableTimSort.java:185) at java.util.Arrays.sort(Arrays.java:1246) at Project1.main(Project1.java:32)개체 배열 정렬? 사용자 입력과 비교

import java.util.Scanner; 
import java.util.Arrays; 

public class Project1 
{ 
public static void main (String args[]) 
{ 
Scanner input = new Scanner(System.in); 

Website [] websites = new Website[20]; 

String temp; 
String temp2; 
int days = 4;  

for(int i=0; i < 10; i++) 
{ 
     System.out.println("Enter the URL of the Website:"); 
     temp = input.nextLine(); 
     websites[i] = new Website(); 
     websites[i].setUrl(temp); 

     System.out.println("Enter the name of the Website:"); 
     temp2 = input.nextLine(); 
     websites[i].setName(temp2); 

    } 

Arrays.sort(websites); 

for(int i = 0; i<10; i++) 
{ 
     System.out.println("URL:" + websites[i].getUrl()+ " Current Visits:" +  websites[i].getCurvisit() + " Overall Visits:" + websites[i].getOvrvisit()); 

     System.out.println("Name of Website:" + websites[i].getName()); 

} 

} 
} 
//Class 2: 
import java.util.Scanner; 
import java.util.Random; 

public class Website implements Comparable <Website> 
{ 
private String url; 
private String name; 
private int currentVisit; 
private int overallVisit; 

public Website() 
{ 
    this.url = url; 
    this.name = name; 
    this.currentVisit = getRandom1(); 
    this.overallVisit = getRandom2(); 

} 

public String getUrl() 
{ 
    return url; 
} 

public void setUrl(String s) 
{ 
    url = s; 
} 

public String getName() 
{ 
    return name; 
} 

public void setName(String n) 
{ 
    name = n; 
} 

public int getRandom1() 
{ 
Random rand = new Random(); 

int num = rand.nextInt(4); 
return num; 
} 

public int getRandom2() 
{ 
Random rand = new Random(); 

int num2 = 10 + rand.nextInt(11); 
return num2; 
} 

public int getCurvisit() 
{ 
return currentVisit; 
} 

public int getOvrvisit() 
{ 
    return overallVisit; 
} 

public int compareTo(Website compareVisit) 
{ 
    int compareAll = ((Website) compareVisit).getOvrvisit(); 
    return compareAll - this.overallVisit; 
} 
} 
+0

다른 곳에서는 '웹 사이트'개체가 필요합니다. TreeMap을 사용하고 방문객을 위해 비교자를 정의하고 DataSet이 작업을 처리하도록합니다. 그것은 심지어 동적으로 작동합니다. 그렇지 않으면,'Website'가'Comparable'을 구현하고, 적절한 compareTo 메소드를 정의하고,하고있는 일을하십시오. 간단한 예제를 원한다면 알려주십시오. – MeetTitan

+0

질문을 편집했습니다. 다른 수업이 없습니다. 방법에 대한 내 비교가 어떻게 든 작동하지 않는 것 같습니다. 당신이 보여줄 수 있고 모범을 보일 수 있거나 올바른 방향으로 나를 가리킬 수 있다면 그것은 어떤 방식 으로든 대단히 감사 할 것입니다. – Tools

+0

코드에서 두 번의 실수 1 단계 : 생성자가 20에서 10으로 변경되거나 루프가 20으로 변경됩니다. NPE의 원인은 배열에 null을 저장한다는 것입니다. ComparableTimSort의 구현은 null을 검사하지 않습니다. 참조 : http://stackoverflow.com/questions/23796951/why-do-i-have-nullpointereception-in-my-sort-implementation 웹 사이트 [] websites = 새 웹 사이트 [20]; 을 (으)로 변경했습니다. 웹 사이트 [] websites = 새 웹 사이트 [10]; 2 단계 : overallVisits에 대한 언급이 있더라도 루프에서 해당 값을 설정하지 않았습니다. – Sanka

답변

0

당신이 당신의 배열의 20 개 요소를 할당했지만에만 필링 (10)

새로운 배열

Website [] websites = new Website[20]; 

로 채워 때문에 당신은 java.lang.NullPointerException을 받고있어 배열

for(int i=0; i < 10; i++) 
+0

Im은 20 개의 다른 웹 사이트 목록 텍스트 파일에서 10 개를 선택하고 무작위로 방문을 주어야합니다. 초기 방문 값의 범위는 현재 하루에 0-3이고 전체적으로는 10-20입니다. 프로그램이 시작되면 인기도에 따라 정렬 된 모든 관련 정보가있는 웹 사이트를 표시합니다 (가장 많이 방문한 웹 사이트가 가장 인기가 있음). 방문 횟수는 무작위이기 때문에 프로그램 실행마다 출력이 달라야합니다. – Tools