2014-02-04 7 views
-1

Напишите программу, которая читает список действительных чисел. По завершении программы он должен распечатывать только уникальные номера. То есть, только цифры, которые появляются один раз в списке. Если есть более чем 50 уникальных номеров в списке, то вы должны напечатать только первые 50. Код:Java: ошибки в программе?

import java.util.*; 
import java.io.*; 
import java.util.Arrays; 


public class Hmwk { 

public static void main(String[] args) throws FileNotFoundException { 
    Scanner input=new Scanner (new File ("input.txt")); 
    int n = 0; 
    double[] numbersArray = new double[100000]; 
    while (input.hasNextDouble()){ 
     double in = input.nextDouble(); 
     numbersArray[n]=in; 
     n++; 
    } 
    Arrays.sort(numbersArray); 
    inList(numbersArray); 
    double[] uniqueArray = Arrays.copyOfRange(numbersArray, 0, n); 
    printReport(uniqueArray); 
} 


public static double[] inList(double[] list){ 
    int position = 0; 
    final int MAX_SIZE = 50; 
    double [] uniqueArray = new double[MAX_SIZE]; 
    for (int i = 0; i < list.length; i++){ 
     for (int j = 1; j < list.length; j++){ 
      if (list[i] != list[j]){ 
       uniqueArray[position]= i; 
       position++; 
      } 
      } 
     } 
    return uniqueArray; 
    } 



public static void printReport(double[] list) 
{ 
    System.out.println("The unique numbers were"); 
    System.out.println(Arrays.toString(list)); 

} 


} 

После создания нового алгоритма и происходит в моей книге я снова придумал выше коду объясните проблему вверху. Я попытался отсортировать все числа в массиве, который я привел из input.txt. Затем я попытался сравнить индексы чисел, используя inList. Я попытался сравнить его с индексом [0] с [1], [1] до [2] и т. Д. Если это отсортированный список, если числа в сравниваемых индексах равны, это не уникальный номер для списка, но если они разные, они являются уникальным числом и добавляются в uniqueArray. Тем не менее, я получаю следующую ошибку.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50 
at Hmwk.inList(Hmwk.java:33) 
at Hmwk.main(Hmwk.java:20) 

Любые идеи для меня? И, как всегда, я действительно ценю ваше время.

+2

'list' - это массив из 50 000 элементов, и вы выполняете цикл от' 0' до 'list.length', но' uniqueArray' содержит только 50 элементов. Так что да, вы попадете в индекс массива за пределы. –

+0

Как бы я начал цикл с [0] до последнего двойника не 0.0 в моем списке? – user102817

+0

Итак, если у вас есть список из 10 000 '3', за которыми следуют отдельные цифры, должна ли ваша программа найти все четкие цифры? Или, просто вернем 3? Я не понимаю этого задания. –

ответ

1

Ваш numbersArray определяется с большим количеством элементов, чем ваш uniqueArray:

double[] numbersArray = new double[100000]; 

и

final int MAX_SIZE = 50; 
double [] uniqueArray = new double[MAX_SIZE]; 

и

// list is in this case your numbersArray 
for (int i = 0; i < list.length; i++){ 
    for (int j = 1; j < list.length; j++){ 
     if (list[i] != list[j]){ 
      uniqueArray[position]= i; // ArrayIndexOutOfBoundsException 
      position++; 
     } 
    } 
} 

И это приведет к краху, когда позиция достигает 50, потому что ваш uniqueArray имеет только 50 элементов, начиная остроумие h 0, поэтому здесь 49 - последний индекс.

0

Эта линия ваша проблема:

uniqueArray[position]= i; 
position++; 

положение непрерывно увеличивается и достигает 50.

0

Вы должны использовать класс контейнера. HashMap с двойным ключом AS и Integer в качестве счетчика. Или LinkedList of Double.

Смежные вопросы