Я пытаюсь переупорядочить 2D-массив с помощью циклов. Первый метод generateSong() создает массив со случайными удвоениями и отлично работает. Тогда у меня есть метод simulateSong(). Его цель - взять строки из массива generateSong() и перепечатать их как столбцы, начиная с нижнего.Переупорядочение строк и столбцов 2D-массива
import java.util.concurrent.ThreadLocalRandom;
public class Guitar {
private int strings;
private int chords;
private double[][] song;
public Guitar(int mstrings, int mchords) {
this.strings = mstrings;
this.chords = mchords;
song = new double[mstrings][mchords];
}
public void generateSong() {
for (int i = 0; i < song.length; i++) {
for (int j = 0; j < song[i].length; j++) {
song[i][j] = ThreadLocalRandom.current().nextDouble(27.5, 4186);
System.out.printf(" %.2f",song[i][j]);
}
System.out.println();
}
}
public void simulateSong() throws InterruptedException {
System.out.println("\nGuitar.simualateSong() ");
for(int i = song.length-1; i >= 0; i--) {
for(int j = song[i].length-1; j >= 0; j--) {
song[i][j] = song[i][0];
System.out.printf(" %.2f",song[i][j]);
}
System.out.println();
}
}
}
Число строк и столбцов задается параметрами командной строки в основном методе.
public class Songwriter {
public static void main(String[] args) throws InterruptedException {
System.out.println("Guitar(): Generated new guitar with " + args[0] + " strings. Song length is " + args[1] + " chords.");
String args0 = args[0];
int strings = Integer.parseInt(args0);
String args1 = args[1];
int chords = Integer.parseInt(args1);
Guitar guitarObj1 = new Guitar(strings, chords);
guitarObj1.generateSong();
guitarObj1.simulateSong();
}
}
Так, в конечном счете, что я пытаюсь сделать, это сделать так, чтобы строки изначально читать слева направо, теперь читаются как столбцы сверху вниз. Вот требуемый вывод с 3 строками и 4 столбцами, заданными как аргументы командной строки.
Guitar(): Generated new guitar with 3 strings. Song length is 4 chords.
2538.83 2269.30 1128.09 3419.77
2356.74 2530.88 2466.83 3025.77
3898.32 3804.22 3613.94 337.93
Guitar.simualateSong()
3898.32 2356.74 2538.83
3804.22 2530.88 2269.30
3613.94 2466.83 1128.09
337.93 3025.77 3419.77
И с кодом, который у меня в настоящее время есть, является результатом, который я получаю.
Guitar.simualateSong()
3898.32 3898.32 3898.32 3898.32
2356.74 2356.74 2356.74 2356.74
2538.83 2538.83 2538.83 2538.83
Я знаю, что единственная проблема (проблемы) лежат в цикле for метода simulateSong(). Как вы видите, мой результат близок, но нет сигары.
Это '0' звучит как ошибка здесь: song [i] [j] = song [i] [0]; –
Я знаю, что 0 не должен туда идти, но он как можно ближе к самому себе, поэтому я написал – seventeenhundred
Спасибо за ответы. Теперь он работает правильно. – seventeenhundred