2014-01-14 5 views
0

У меня очень трудное время, пытаясь понять, почему я получаю эту ошибку. Когда я использую файл драйвера для тестирования программы, он терпит неудачу.NullPointer Exception Jcreator, Java

Вот мой код:

import java.util.Scanner; 
import java.lang.Math.*; 
public class Histogram 
{ 
private int[] arrayData; 
private int[] arrayRange; 
private final int LOW = 1; 
private final int HIGH = 100; 

    public Histogram() 
    { 
     int[] arrayData = new int[11]; 
    } 

    public void getInput() 
    { 
     int[] arrayRange = new int[11]; 
     for(int count = 1; count < arrayRange.length; count++) 
      { 
       arrayRange[count] = count * 10; 
      } 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter numbers from 1 to 100, Type -999 to quit."); 
     int nextNumb = input.nextInt(); 
     while(nextNumb != -999) 
     { 
      if(nextNumb >= LOW && nextNumb <= HIGH) 
      { 
       for(int i = 0; i <= arrayRange.length; i++) 
       { 
       if(nextNumb > arrayRange[i] && nextNumb <= arrayRange[i+1]) 
        arrayData[i]++; 
       } 
       nextNumb = input.nextInt(); 
      } 
      else arrayData[10]++; 
      nextNumb = input.nextInt(); 
     } 
    } 

    public String starPrint(double count) 
    { 
     String star = ""; 
     count = (Math.round(count)/5); 
     for(int i = 1; i <= count; i++) 
     { 
      star = star + "*"; 
     } 

     return star; 
    } 

    public String toString() 
    { 
     String results = " Range | Histogram" + "\n"; 
     results = results + "1 - 10 | " + starPrint(arrayData[0]) + "\n"; 
     results = results + "11 - 20 | " + starPrint(arrayData[1]) + "\n"; 
     results = results + "21 - 30 | " + starPrint(arrayData[2]) + "\n"; 
     results = results + "31 - 40 | " + starPrint(arrayData[3]) + "\n"; 
     results = results + "41 - 50 | " + starPrint(arrayData[4]) + "\n"; 
     results = results + "51 - 60 | " + starPrint(arrayData[5]) + "\n"; 
     results = results + "61 - 70 | " + starPrint(arrayData[6]) + "\n"; 
     results = results + "71 - 80 | " + starPrint(arrayData[7]) + "\n"; 
     results = results + "81 - 90 | " + starPrint(arrayData[8]) + "\n"; 
     results = results + "91 - 100 | " + starPrint(arrayData[9]) + "\n"; 
     results = results + "Outliers: " + starPrint(arrayData[10]) + "\n"; 
     return results; 
    } 
} 

Я считаю, что проблема в моем методе getInput прямо здесь, чтобы быть точным:

if(nextNumb > arrayRange[i] && nextNumb <= arrayRange[i+1]) 
    arrayData[i]++; 

Я понятия не имею, что случилось с ним, хотя я новичок-программист и не смог найти решение этой конкретной проблемы. Спасибо за любую помощь, которую вы можете дать!

+0

Вы можете поделиться полным StackTrace? – Mureinik

ответ

2
public Histogram() 
{ 
    int[] arrayData = new int[11]; 
} 

Вы 're shadowing вы r arrayData Поле в конструкторе. Это создает локальную переменную с тем же именем, что и поле вашего класса arrayData, инициализируя его, а затем сразу же отбрасывая. Когда вы попытаетесь использовать поле позже в своем коде, это null. Избавьтесь от части int[].

Обратите внимание, что ваше следующее исключение будет ArrayIndexOutOfBoundsException ... Вы должны смотреть на вашу петле;)

+0

Посмотрите на мой ответ на вопрос 'ArrayIndexOutOfBoundsException' – x4rf41

+0

Спасибо большое! Отлично работает – OGLOKE

0

это: for(int i = 0; i <= arrayRange.length; i++) не будет работать, так как вы пытаетесь получить доступ к arrayRange[i] и arrayRange[i+1]

который DonT существует для i = arrayRange.length-1 и далее

так изменить его на:

for(int i = 0; i < arrayRange.length-1; i++) 
+0

Спасибо, ха-ха, ты спас меня от волос! – OGLOKE