我希望有人可以帮我解决这两个让我陷入项目的价值观。我有两个类,第一个生成一个带有随机值的2D数组。
import java.util.concurrent.ThreadLocalRandom;
public class Guitar {
private int strings;
private int chords;
public Guitar(int mstrings, int mchords) {
this.strings = mstrings;
this.chords = mchords;
}
private double[][] song = new double[strings][chords];
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();
}
}
}
行数和列数由命令行参数确定。 args [0]是行数,args [1]是列数。我将它们转换为主方法类
中的int变量public class Songwriter {
public static void main(String[] args) {
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();
}
}
我的问题在于传递命令行参数的int变量以使2D数组具有相应的大小。我知道我的代码并不是完全错误的b / c当我设置字符串和和弦变量等于3和4或者吉他类本身的任何东西时,表格打印得很好。
抱歉,如果我似乎无能为力。我的课程刚刚介绍了面向对象编程的第一章,我还没有完成基础知识。
答案 0 :(得分:1)
这是有问题的路线:
private double[][] song = new double[strings][chords];
当您创建Guitar类的新对象时,song
数组会初始化为当时strings
和chords
的值,这很可能(很可能)是0。
将其更改为:
private double[][] song;
public Guitar(int mstrings, int mchords) {
this.strings = mstrings;
this.chords = mchords;
song = new double[mstrings][mchords];
}
编辑: OP您刚刚回答了自己的问题:)
它不会崩溃,但唯一的输出是system.out.print 第一线主力。我相信这是因为琴弦和和弦 变量默认为0,使数组为0x0,而我没有 改变他们的价值观