Двумерные массивы в Java

#java #arrays #multidimensional-array

#java #массивы #многомерный массив

Вопрос:

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

Класс 1: класс тестировщика

 public class CatapultTester{

    public static void main(String[] args){

        double [] velocity = {20,25,30,35,40,45,50};
        double [] degrees = {20,25,30,35,40,45,50};


        Catapult vars = new Catapult(velocity,degrees);

        double [] distance = vars.calcDistance();

        System.out.println("              Projectile Distance (feet)              ");
        System.out.printf("%s", "MPH");
        for (int i = 0; i < degrees.length; i  ){
            System.out.printf("%5.0f %1s",degrees[i], "deg");
        }

        System.out.print("n");
        System.out.println("==================================================================");

        for(int i = 0; i < distance.length; i  )
        {
            System.out.printf( "%2.0f ", velocity[i]);
            for(int f = 0; f < distance.length; f  )
            {

                System.out.printf("%8.1f ",  distance[i]);

            } 
            System.out.printf("n");
        }
    }
}
  

Класс 2:

 public class Catapult extends CatapultTester
{
    double [] velocity;
    double [] degrees;

    Catapult(double[] v, double[] d){
       velocity = v;
       degrees = d;
    }

    public double [] calcDistance(){

        double [] total = {0,0,0,0,0,0,0};

        for (int i = 0; i < degrees.length; i  ){

            total[i] = (Math.pow(velocity[i]/2.237, 2) * Math.sin(2 * Math.toRadians(degrees[i]))/9.8);

        }

        return total;
    }
}
  

В целом, мне нужно взять массивы velocity и angle и объединить их в один двумерный массив, и они используют метод calcDistance (), чтобы получить набор значений, а затем использовать цикл для печати их в таблицу в качестве выходных данных.

Комментарии:

1. Вы не сказали нам, что должна делать ваша программа, работает ли она так, как ожидалось, и где вы хотите ввести двумерный массив. Итак, на какой именно вопрос вы хотите, чтобы мы ответили?

2. Я отредактировал свои вопросы, спасибо, что попросили разъяснений

Ответ №1:

Двумерный массив — это просто способ организовать ваши данные в виде сетки. Это массив массивов. В вашем случае для каждого возможного угла запуска и скорости вы вычисляете достигнутое расстояние. Итак, если вы использовали двумерный массив, вы могли бы, например, рассматривать одно измерение как угол, а другое измерение как скорость. Затем сохраните это конкретное вычисленное расстояние там.

Например, если бы я создал игру в крестики-нолики, я мог бы представить игровое поле массивом 3×3. И тогда я мог бы указать ход игрока, выполнив что-то вроде, board[row][column] = 'X'; где row и column — значения в диапазоне [0 ..2].

В вашем случае вы можете не захотеть индексировать в массив фактические значения скорости и угла, потому что у вас будут разреженные массивы; то есть, чтобы сохранить расстояние для velocity = 50, вам понадобится массив длиной > = 50, и многие из этих слотов массива не будут использоваться. Более того, ваши скорости и углы оказываются целыми числами, но вместо этого они могут быть значениями с плавающей запятой и дробными частями. Итак, вместо того, чтобы делать distances[angle][velocity] , вы бы сделали, distances[i][j] где i и j являются индексами в ваших degrees и velocities таблицах соответственно.

Комментарии:

1. итак, нужно ли создавать мою комбинацию двух массивов (velocity и angle) как array[velocity] [angle] = ‘X’; ? и не могли бы вы, пожалуйста, помочь мне в том, как заполнить значения для «x». Высоко ценится

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