在其他类中实现对象参数

时间:2016-04-05 04:22:20

标签: java

我希望有人可以帮我解决这两个让我陷入项目的价值观。我有两个类,第一个生成一个带有随机值的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或者吉他类本身的任何东西时,表格打印得很好。

抱歉,如果我似乎无能为力。我的课程刚刚介绍了面向对象编程的第一章,我还没有完成基础知识。

1 个答案:

答案 0 :(得分:1)

这是有问题的路线:
private double[][] song = new double[strings][chords];

当您创建Guitar类的新对象时,song数组会初始化为当时stringschords的值,这很可能(很可能)是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,而我没有   改变他们的价值观