#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. Да; здесь у вас есть несколько углов и несколько скоростей; если представить сетку, в которой углы увеличиваются вдоль одной оси, а скорость увеличивается на другой, то каждое пересечение значения угла и скорости дает вам расстояние; заполнение этих значений расстояния для всех комбинаций угла и скорости создало бы таблицу, подобную таблице умножения, которую вы видите в начальной школе. У вас есть код для вычисления расстояния для заданной комбинации угла и скорости.