2016-04-05 7 views
0

私は、誰かが私がプロジェクトに取り掛かっているこれらの2つの値で私を助けてくれることを願っています。私は2つのクラスを持ち、この最初のクラスはランダムな値を持つ2次元配列を生成します。他のクラスにオブジェクトパラメータを実装する

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]は列数です。私は私の問題は、2次元配列に対応するサイズを作るために、コマンドライン引数の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(); 

} 

} 

mainメソッドクラスの変数をintにそれらを変換します。私は私のコードが完全に間違っていないことを知っている/私は3と4またはGuitarクラス自体の文字列とコードの変数を設定すると、テーブルは正常に印刷されます。

私は無知と思われる場合は申し訳ありません。私のクラスでは、オブジェクト指向プログラミングの最初の章を説明しましたが、私はまだファンダメンタルズを解消していません。

+2

を変更することができないよだから何が実際に起こりますか?出力に問題がありますか?それはクラッシュしますか? – Makoto

+0

あなたが直面しているエラー – Alok

+0

クラッシュはしませんが、唯一の出力はメインの最初の行にあるsystem.out.printです。私は文字列とコードの変数がデフォルトで0になり、配列0x0が作成され、その値を変更できないと考えています。 – seventeenhundred

答えて

1

これは問題の行です:あなたはあなたのギタークラスの新しいオブジェクトを作成すると
private double[][] song = new double[strings][chords];

song配列はstringschordsの値はその時点であるものは何でもで初期化され、(ほとんどのだろう

private double[][] song; 

public Guitar(int mstrings, int mchords) { 
    this.strings = mstrings; 
    this.chords = mchords; 

    song = new double[mstrings][mchords]; 
} 

:おそらく)これを0

変更してもEDIT: OPあなたは自分自身の質問:)

に答えそれはクラッシュしませんが、唯一の出力は、メインの 最初の行にsystem.out.printです。私は、配列0x0のを作り、それが0に文字列や和音 変数のデフォルトのためだと考えている、と私は その値

+1

これは正しいです。インスタンス変数初期化子は、コンストラクタの下にテキストで表示されていても、常にコンストラクタの前に実行されます。したがって、 'int'はデフォルトで0に初期化されているので、' song'はOPのコードでは 'double [0] [0]'です。 – Radiodef

+1

ありがとうございました。私はそれが0x0であることを知っていたが、私はそれを修正するのが面倒だった。ありがとう。 – seventeenhundred

関連する問題