2017-01-01 3 views
-3

Мне нужно создать массив удвоений с учетом max и min и интервала. Итак, массив будет выглядеть примерно так: {2.9, 4.9, 6.9, ... и т. Д.}Создание массива из диапазона чисел

Я получаю массив нулей.

public class FoolinAround { 
    public static void main(String[] args) { 
     double min = 2.9; 
     double max = 20.6; 
     double gap = 2.0; 
     double count = (max - min)/gap + 2; // as will need first and last 
               // element also 

     double array[] = new double[(int) count]; 
     for (int j = 0; j < array.length; j++) { 
      double i = array[j]; 
      min = min + gap; 

     } 
     for (double k : array) { 
      System.out.print(array[(int) k] + ","); 
     } 

    } 
} 
+4

Нет, где у вас есть массив [j] = something'. Как вы ожидаете, что массив будет заполнен чем угодно, если вы не присвоите ничего элементам массива? –

+3

Обратите внимание, что это: 'double i = array [j];' ничего не используется. Он создает локальную двойную переменную 'i', присваивает 0 этой же локальной переменной (так как это весь массив), а затем отбрасывает одну и ту же локальную переменную. –

+0

Я не знаю, что должен был бы сделать этот массив, когда это будет сделано. Просьба привести пример. – weston

ответ

1

Похоже, вы упускаете назначение в массив (array[j] = something;). Из вашего объяснения видно, что array должен содержать результаты. Если я понимаю проблему, которую вы пытаетесь решить, это выглядит как решение.

public class FoolinAround { 
    public static void main(String[] args) { 
     double min = 2.9; 
     double max = 20.6; 
     double gap = 2.5; 
     double count = (max - min)/gap + 2; // as will need first and last 
               // element also 

     double array[] = new double[(int) count]; 
     for (int j = 0; j < array.length; j++) { 
      array[j] = min + (j*gap); 
     } 
     for (double k : array) { 
      System.out.print(array[(int) k] + ","); 
     } 

    } 
} 

Я не проверил, что этот расчет даст вам правильный размер для вашего массива: double count = (max - min)/gap + 2;. Я предлагаю вам проверить этот расчет. Поскольку вы полагаетесь на усечение, а не на округление, у вас может быть ошибка «один за другим».

+0

Спасибо, миллион, извините, я совершенно новый для кодирования. Должен был заметить это. Просто наличие пост-ментального блока. Спасибо! – Harry

1

Вот как

double[] array = DoubleStream.iterate(min, prev -> prev + gap) 
          .limit(count) 
          .toArray(); 

Link to DoubleStream

+0

@mangotang хорошее место. Спасибо – Dummy

+0

Спасибо, Dummy, это для проекта, поэтому я не могу использовать пакеты или библиотеки и должен использовать базовую java, но я очень ценю ваш ответ. – Harry

+2

Спасибо за информацию. Кстати, когда вы задаете вопрос, не забудьте перечислить ваши требования, чтобы люди, которые помогают, будут знать, чтобы дать вам лучший ответ. – Dummy

0

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

double min = 2.9; 
    double max = 20.6; 
    double gap = 2.0; 
    double count = (max - min)/gap + 2.0; 

    System.out.println(count); 
    double array[] = new double[(int) count]; 
    for (int j = 0; j < array.length; j++) { 

     // double i = array[j]; /*Not sure why this assignment is used 
     // here?*/ 
     array[j] = min; 
     min += gap; 

    } 

    for (double k : array) { 
     System.out.print(k + "\n"); // Here k is the double value from the 
            // array. array[(int)k] will give you 
            // element of array indexed at the 
            // element of array. 
    } 
+0

Спасибо, что так много Nimit, это было очень полезно! – Harry

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