2016-03-23 3 views
0

Я пытаюсь создать и массив, который может хранить числа с плавающей точкой где угодно от 0.00 до 100.00. У меня проблема с hArray, возвращаясь назад и четвертая от него, говоря, что нужно инициализировать и попробовать множество способов сделать это, он говорит мне изменить его на doublehArray [] = null ;. но когда я пытаюсь, чтобы в нем не хранилось никакого значения.Array в java, со случайным числом

проблема возникает между линией 3, а также линией 27, которая является hArray [я}] = rnum

игнорировать команду печати строки я просто используя те, чтобы проверить ошибки.

public static void main(String[] args) { 
    int i; 
    double hArray[]; 
    int nYears = 0, y = 0; 
    double rMax = 0.00,rMin = 100.00; 

    get input check if between 1-80 
    while(y == 0){ 
    String userData = JOptionPane.showInputDialog 
           ("Enter number of years"); 
    nYears = Integer.parseInt(userData); 

    if (nYears > 1 && nYears <= 80) 
     y = 1; 

    } 

    reset y to = 0 
    y = 0; 
    System.out.println("step1 "+ nYears+ " "+ y); 
    while(y <= nYears){ 
     System.out.println("step2"); 
     for(i = 0; i < 12; i++){ 
      System.out.println("step3"); 
      Random rand = new Random(); 
      double rNum = rand.nextFloat() * (rMax - rMin) + rMin; 
      hArray[i] = rNum; 
      System.out.println("step4" + hArray[i]); 
     } 
+0

Ваш код содержит бесконечный цикл. Убедитесь, что 'y' увеличивается во втором цикле' while'. – 4castle

+0

Извините, что я там кое-что удалил, чтобы сократить его, чтобы опубликовать здесь, но спасибо, чтобы указать на это. – Pwoods

ответ

2

Важно отметить некоторые вещи на Java. Во-первых, эта линия «объявляя ссылку»:

double hArray[]; 

Все это делает, это сказать, что там будет массив типа double и дает этот массив имя hArray. Этот массив фактически не инициализирован. Затем на этой линии:

hArray[i] = rNum; 

... rNum не может на самом деле поставить в любом месте, так как массив не существует.

Вы могли бы сделать что-то вроде этого сначала «инициализирован» массив длины 12:

double[] hArray = new double[12]; 

Тогда вторая линия будет работать. Обратите внимание, что если вы попытаетесь ссылаться на местоположение больше 12, это приведет к ошибке: размер списка здесь считается неизменным.

Кроме того, вы можете избежать использования примитивов и использовать коллекцию. В этом случае List:

List<Double> hArray = new ArrayList<>(); 

А потом, позже:

hArray.add(rNum); 

Это предотвращает Вас от необходимости знать, как большой массив должны быть с самого начала. Список будет автомасштабирован. Кроме того, он не будет принимать значения по умолчанию: инициализируя массив примитивов, значение по умолчанию, эквивалентное 0, будет помещено в массив. Рекомендуется избегать использования примитивов.

+0

Удостоверьтесь, что 'ArrayList' использует дженерики вместо того, чтобы быть сырым типом.Измените его на 'new ArrayList ()' или даже 'new ArrayList <>()' – 4castle

+0

@ 4castle 'List hArray = new ArrayList();' ** уже ** использует generics. Тип нового списка выводится Java. Кроме того, лучше использовать 'List', чем' ArrayList', как тип переменной, если не существует конкретной причины знать класс реализации. –

+0

Я не обсуждаю ваше использование 'List'. Я просто говорю, что согласно [this] (https://docs.oracle.com/javase/8/docs/technotes/guides/language/type-inference-generic-instance-creation.html) отсутствие дженериков в конструкторе будет генерироваться «предупреждение без предупреждения», несмотря на то, что он ничего не сломает. – 4castle

1

double hArray[] объявляет массив, но не выделяет его.
Также помните, что массивы имеют фиксированный размер.

Так как вы код нужен массив из 12 значений, следует изменить на:

double[] hArray = new double[12]; 

Массив теперь будет выделено 12 значений, все недобросовестный 0.0.

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