public class Main {
final static double a = 1.5;
final static double deltaX = 0.005;
static double y = 0;
static int steps = 0;
private static double arrayX[];
public static void main(String[] args) {
Tabul();
FindStepsQuantity();
createArrayOfXValues(arrayX);
}
public static void Tabul() {
for (double x = 0.8; x <= 2.0; x = x + deltaX) {
if (x < 1.7) {
y = Math.PI * x * x - 7 / x * x;
}
else if (x == 1.7) {
y = a * x * x * x + 7 * Math.sqrt(x) + Math.log10(x + 7 * Math.sqrt(x));
}
else {
y = Math.log10(x + 7 * Math.sqrt(x));
}
}
}
public static int FindStepsQuantity() {
for (double i = 0.8; i <= 2.0; i = i + deltaX) {
steps++;
}
System.out.println(steps);
return steps;
}
public static void createArrayOfXValues(double[] array) {
array = new double[steps];
for (int i = 0; i < array.length; i++) {
y = array[i];
System.out.println(array[i]);
}
}
Не могу понять почему метод createArrayOfXValues
не заполняет массив значениями y
, которые были получены в методе Tabul
. Если y
статическая переменная, то она ведь должна менять значение после вызова метода Tabul
.
Что я упускаю?
В методе Tabul
(в Java, кстати, принято называть методы с маленькой буквы) в поле y
по очереди присваиваются все значения, в результате чего в y
хранится только последнее значение.
В методе createArrayOfXValues
при создании нового массива array = new double[steps]
исходный массив arrayX
, переданный в метод, никоим образом не меняется. А в строке y = array[i]
в поле y
на каждой итерации пишется значение по умолчанию (0.0
) из соответствующей ячейки массива.
Если нужно просто сохранить все значения y
, полученные в методе Tabul
, то сделать это можно так:
private static final double
A = 1.5,
MIN_X = 0.8,
MAX_X = 2.0,
DELTA_X = 0.005;
public static void main(String[] args)
{
List<Double> list = tabul();
System.out.println(list);
}
public static List<Double> tabul()
{
List<Double> values = new ArrayList<>();
for (double x = MIN_X; x <= MAX_X; x += DELTA_X)
{
double y;
if (x < 1.7)
{
y = Math.PI * x * x - 7 / x * x;
}
else if (x == 1.7)
{
y = A * x * x * x + 7 * Math.sqrt(x) + Math.log10(x + 7 * Math.sqrt(x));
}
else
{
y = Math.log10(x + 7 * Math.sqrt(x));
}
values.add(y);
}
return values;
}
Вместо double[]
используется List<Double>
, но при желании можно создать массив на базе списка:
double[] array = new double[list.size()];
for (int i = 0; i < list.size(); i++)
{
array[i] = list.get(i);
}
Либо с использованием Java 8:
double[] array = list.stream().mapToDouble(e -> e).toArray();
В коде остались "магические константы" 1.7
и 7
. Так как я не знаю что они обозначают, то в константы их не вынес.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Задача: В первой активности Activity1 мы создаем экземпляр класса VeryFatClass:
Необходимо в java коде динамически гинерировать xml по xsd схеме, в которой есть элементы с разными паттернамиНапример:
Я передаю файл-картинку програмкой на qt через интернет по сокетам: