Сделать размерность массива гибким

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

Я создал здесь массив класса и пока не нашел ни одного примера о преобразование массива класса в double.

Я пытаюсь, но в результате этот массив нельзя преобразовать в двойной.

вот мой код:

первая страница:

package menu;

public class Vector3d {

    private final float x;
    private final float y;
    private final float z;

    Vector3d(float x, float y, float z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public void Vectorprint() {

        System.out.println("(" + x + "," + y + "," + z + ")");

    }

    /**
     *
     * @param V1
     * @param V2
     */
    public void addition(Vector3d V1, Vector3d V2) {

        float value1 = V1.x + V2.x;
        float value2 = V1.y + V2.y;
        float value3 = V1.z + V2.z;

        System.out.println("The Vector after addition (" + value1 + "," + value2 + "," + value3 + ")");

    }

    public void Difference(Vector3d V1, Vector3d V2) {

        float value1 = V1.x - V2.x;
        float value2 = V1.y - V2.y;
        float value3 = V1.z - V2.z;

        System.out.println("The Vector after subtraction (" + value1 + "," + value2 + "," + value3 + ")");
    }

    public void dotProduct(Vector3d V1, Vector3d V2) {
        float value1 = V1.x * V2.x;
        float value2 = V1.y * V2.y;
        float value3 = V1.z * V2.z;
        float sum = value1 + value2 + value3;
        System.out.println("The scalarproduct is : (" + value1 + "," + value2 + "," + value3 + ")   the complete Value of Scalarproduct : " + sum);

    }

    public float multiplcation(Vector3d V, int number) { 

        float value1 = V.x * number;
        float value2 = V.y * number;
        float value3 = V.z * number;

        return value1 + value2 + value3;
    }

    public void unitVector(Vector3d v ){
      double longVector = Math.sqrt((v.x*v.x)+(v.y*v.y)+(v.z*v.z));
      double value1=v.x/longVector;
      double value2=v.y/longVector;
      double value3=v.z/longVector;


      System.out.println("the lang of this vector : " +longVector);
      System.out.println("The unitvector is : ("+ value1+","+value2+","+value3+")");
    }
}

вторая страница:

package menu;

import java.util.Scanner;

public class Menu {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        Vector3d v1, v2, v3;
        float element1, element2, element3, element4, element5, element6;

        System.out.println("the elements of first vector :  ");
        element1 = input.nextFloat();
        element2 = input.nextFloat();
        element3 = input.nextFloat();

        v1 = new Vector3d(element1, element2, element3);

        System.out.println("the elements of second vector :  ");
        element4 = input.nextFloat();
        element5 = input.nextFloat();
        element6 = input.nextFloat();

        v2 = new Vector3d(element4, element5, element6);
        v3 = new Vector3d(0, 0, 0);

        System.out.println("the inputed first Vector");
        v1.Vectorprint();

        System.out.println("the inputed second Vector");
        v2.Vectorprint();

        v3.addition(v1, v2);
        v3.Difference(v1, v2);
        v3.dotProduct(v1, v2);

        System.out.println("sellect a number to multiplication with Vector : ");
        int multiplicator = input.nextInt();
        System.out.println("Which Vector would you like to sellect for first input (V1) and second (V2)");
        String answer = input.next();
        if ("V1".equalsIgnoreCase(answer)) {
            System.out.println("The Vector after multiplication : " + v3.multiplcation(v1, multiplicator));
        } else if ("V2".equalsIgnoreCase(answer)) {
            System.out.println("The Vector after multiplication : " + v3.multiplcation(v2, multiplicator));
        }

        v3.unitVector(v1);
    }
}

вот что я имею в виду именно то, что массив не может быть преобразован в двойной:

package menu1;

import java.util.Arrays;
import java.util.Scanner;

public class Menu1 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("enter the size of vektor : ");
        int vectorSize=input.nextInt();

        vector1 vectorArray[] =new vector1[vectorSize];
        vector1 object1 =new vector1();
        double convertor =vectorArray[vectorSize];
        for (int i=0;i<vectorArray.length;i++){
          vectorArray[i]=input.nextDouble();
        }
        System.out.println("the elements of the vector are :"+Arrays.toString(vectorArray));

        vector1 v1, v2, v3;
        float element1, element2, element3, element4, element5, element6;
        System.out.println("the elements of first vector :  ");
        element1 = input.nextFloat();

        element2 = input.nextFloat();

        element3 = input.nextFloat();

        v1 = new vector1(element1, element2, element3);

        System.out.println("the elements of second vector :  ");
        element4 = input.nextFloat();
        element5 = input.nextFloat();
        element6 = input.nextFloat();
        v2 = new vector1(element4, element5, element6);

        v3 = new vector1(0, 0, 0);

        System.out.println("the inputed first Vector");
        v1.Vectorprint();
        System.out.println("the inputed second Vector");
        v2.Vectorprint();
        v3.addition(v1, v2);

        v3.Difference(v1, v2);

        v3.dotProduct(v1, v2);

        System.out.println("sellect a number to multiplication with Vector : ");
        int multiplicator = input.nextInt();
        System.out.println("Which Vector would you like to sellect for first input (V1) and second (V2)");
        String answer = input.next();
        if ("V1".equalsIgnoreCase(answer)) {
            System.out.println("The Vector after multiplication : " + v3.multiplcation(v1, multiplicator));
        } else if ("V2".equalsIgnoreCase(answer)) {
            System.out.println("The Vector after multiplication : " + v3.multiplcation(v2, multiplicator));
        }

        v3.unitVector(v1);

    }

}

новый код после модификации:


package menu1;

import java.util.Arrays;
import java.util.Scanner;

public class Vector {

    private final double vector1[];
    private final double vector2[];
    private final double vector3[];



    Vector(double matrix1[], double matrix2[],double matrix3[]) {
        this.vector1 = matrix1;
        this.vector2 = matrix2;
        this.vector3 = matrix3;


    }

    Scanner input = new Scanner(System.in);

    public void VectorInput(double Matrix[]) {

        System.out.println("input the elements of Vector :");
        for (int i = 0; i < Matrix.length; i++) {
            Matrix[i] = input.nextDouble();
        }

    }

    public void VectorOutput(double Matrix[]) {

        System.out.println(Arrays.toString(Matrix));

    }

    /**
     *
     * @param Matrix1
     * @param Matrix2
     * @param Matrix3
     */
    public void addition(double Matrix1[], double Matrix2[],double Matrix3[]) {
        double Matrix4[] = new double[Matrix1.length];
        for (int i = 0; i < Matrix1.length; i++) {
            Matrix4[i] = Matrix1[i] + Matrix2[i]+Matrix3[i];
        }

        System.out.println("The Vector after addition :" + Arrays.toString(Matrix4));

    }

    public void Difference(double Matrix1[], double Matrix2[]) {
        double Matrix3[] = new double[Matrix1.length];
        for (int i = 0; i < Matrix1.length; i++) {
            Matrix3[i] = Matrix1[i] - Matrix2[i];
        }

        System.out.println(Arrays.toString(Matrix3));

    }

    public void ScalarProduct(double Matrix1[], double Matrix2[],double Matrix3[]) {
        double Matrix4[] = new double[Matrix1.length];
        for (int i = 0; i < Matrix1.length; i++) {
            Matrix4[i] = Matrix1[i] * Matrix2[i]*Matrix3[i];
        }

        System.out.println("The scalarproduct :" + Arrays.toString(Matrix4));

    }

    public void multiplcation(double Matrix[], int number) {
        double Matrix3[] = new double[Matrix.length];
        for (int i = 0; i < Matrix.length; i++) {
            Matrix3[i] = Matrix[i] * number;
        }

        System.out.println("The Vector after multiplcation :" + Arrays.toString(Matrix3));

    }


    /* I need help here , because I didn't find the right way to calculate the unitvector 
       and the result was unfortunately  wrong

       */ 
    public void unitVector(double matrix[]) {
        double matrix2[]=new double[matrix.length];
        double longVector = 0;
        double result = 0;

        for (int i = 0; i < matrix.length; i++) {
            matrix2[i] = Math.sqrt(matrix[i]*matrix[i]);

        //    for (int j = 0; j < matrix2.length; j++) {
                result = matrix[i] / matrix2[i];
            }

      // }

        System.out.println("The long of the Vector :"+ Arrays.toString(matrix2));
        System.out.println("The unitvector is :" + result);

    }

}



package menu1;

import java.util.Scanner;

public class Menu1 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.println("sellect the size of vectors (maximum 6 elements):");

        int vectorSize = input.nextInt();

        if (vectorSize > 6) {
            System.err.println("Error ! , the number of elements is not acceptable ");
            return;
        }

        double Arrayvector1[] = new double[vectorSize];
        double Arrayvector2[] = new double[vectorSize];
        double Arrayvector3[] = new double[vectorSize];

        Vector object = new Vector(Arrayvector1, Arrayvector2, Arrayvector3);

        object.VectorInput(Arrayvector1);

        object.VectorInput(Arrayvector2);
        object.VectorInput(Arrayvector3);

        System.out.println("The elements of first Vector : ");
        object.VectorOutput(Arrayvector1);
        System.out.println("The elements of second Vector : ");
        object.VectorOutput(Arrayvector2);

        System.out.println("The elements of third Vector : ");
        object.VectorOutput(Arrayvector3);
        //  System.out.println("The addition of two Matrix : ");
        object.addition(Arrayvector1, Arrayvector2, Arrayvector3);

        System.out.println("First Vector -  Second vector:");
        object.Difference(Arrayvector1, Arrayvector2);

        System.out.println("Second Vector -  Firstvector:");
        object.Difference(Arrayvector2, Arrayvector1);

        object.ScalarProduct(Arrayvector1, Arrayvector2, Arrayvector3);

        System.out.println("input a number for multiplication with Vector : ");
        int multiplicator = input.nextInt();

        System.out.println("Which Vector would you like to sellect for first one input (1), second (2) and third(3)");

        String answer = input.next();
        if ("1".equalsIgnoreCase(answer)) {
            //   System.out.println("The Vector after multiplication : " );
            object.multiplcation(Arrayvector1, multiplicator);

            object.unitVector(Arrayvector1);
        } else if ("2".equalsIgnoreCase(answer)) {
            //    System.out.println("The Vector after multiplication : ");
            object.multiplcation(Arrayvector2, multiplicator);

            object.unitVector(Arrayvector2);

        } else if ("3".equalsIgnoreCase(answer)) {
            object.multiplcation(Arrayvector3, multiplicator);
            object.unitVector(Arrayvector3);
        }

    }

}


    ```

Если вам нужен динамический массив, я бы просто использовал какой-то List, например ArrayList. Кроме того, непонятно, о чем вы спрашиваете, что именно не работает?

Mark 24.12.2018 13:23

В чем проблема? Я не нахожу это очень ясным.

Carcigenicate 24.12.2018 13:23

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

Tim Biegeleisen 24.12.2018 13:24
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
86
1

Ответы 1

Итак, вы хотите иметь возможность создавать массив с объектами Vector3d в качестве элементов. Для этого вам нужно использовать коллекцию. Есть много типов в зависимости от того, что вы хотите сделать. По сути, коллекция - это объект, используемый для хранения или группировки нескольких элементов, а также способы использования этих элементов (добавление, удаление, доступ). Для ваших нужд вы можете использовать самый распространенный - ArrayList. Это значение по умолчанию, с которого начинают большинство программистов, и оно подходит для большинства нужд.

ArrayList array;

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

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

sami htw 24.12.2018 15:00

@samihtw Я ответил на ваши вопросы?

jax 25.12.2018 12:53

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

sami htw 26.12.2018 21:25

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

sami htw 26.12.2018 21:33

Я думаю, что вы спрашиваете тривиальную задачу: «Я не знаю, как мне получить доступ к элементам в динамических массивах». Каждый программист должен уметь это делать. Это очень распространено, поэтому должны быть тысячи руководств. Первый шаг - поиск.

jax 27.12.2018 21:25

Если вы посмотрите на код после изменения, вы точно поймете, что я имел в виду. Я сделал это без использования arrayList, как вы сказали. Теперь я пытаюсь найти способ вычислить единичный вектор, используя массив в качестве параметра в методе единичного вектора.

sami htw 31.12.2018 02:14

Другие вопросы по теме