ここから本文です

投票受付中のQ&A

お知らせベストアンサーにふさわしい回答に投票してください。
投票すると知恵コイン5枚プラスされます。
ベストアンサーに選ばれた回答に、最初に投票していれば知恵コイン10枚プラスされます。
  • 残り時間:
    3時間
  • 投票数:
    1票

javaの問題について質問です。

i_love_tirnoさん

javaの問題について質問です。

java初心者なのですがどうしてもわからなくて困っています。

実行結果が

1組 サトウ 45 65 43 96 42
2組 ゴトウ 65 95 45 58 24
3組 カトウ 45 35 43 98 49

と表示するように作りたいのですが

class TestDate{
public static void main(String[] args){
int[] t1={45,65,43,96,42};
int[] t2={65,95,45,58,24};
int[] t3={45,35,43,98,49};
Sc[] sT={new Sc("1組","サトウ",t1),
new Sc("2組","ゴトウ",t2),
new Sc("3組","カトウ",t3),
Hyouji h=new Hyouji(sT);
h.allHyouji();
}
}
を入れた場合にどういうメソッド、コンストラクタを追加すれば
良いのでしょうか。

違反報告

回答

(2件中1〜2件)

並べ替え:回答日時の
新しい順
古い順

 

haruki_yawataさん

質問に記載されていたクラスの名前は、TestDataではないかと思われるため、以下の例ではそのように変更しています。
また、main()メソッドのなかで変数を設定している部分の閉じ括弧(})が不足しています。
Scクラスの配列である変数sTにScのインスタンスを3つセットし終わったところで、初期値リストの終了を示す}が必要です。
あ、あと、これは大した事ではありませんが、初期値リストを区切るコンマ(,)は、最後の要素に付けても問題ありません。
ちょっと見た目に不自然ですが、後で追加するときに便利なので、最後の要素の後にもカンマを付けておくことはよくやります。

<プログラムの修正例>
public class TestData{
public static void main(String[] args){
int[] t1={45,65,43,96,42};
int[] t2={65,95,45,58,24};
int[] t3={45,35,43,98,49};
Sc[] sT={new Sc("1組","サトウ",t1),
new Sc("2組","ゴトウ",t2),
new Sc("3組","カトウ",t3),
};
Hyouji h=new Hyouji(sT);
h.allHyouji();
}
}

class Hyouji{
Sc[] st = null;

Hyouji(Sc[] st){
setSt(st);
}

void allHyouji(){
for (Sc sc : this.st){
System.out.print(sc.getクラス() + " "+ sc.get名前());
for (int i : sc.get点数()){
System.out.print(" " + i);
}
System.out.println();
}
}

void setSt(Sc[] st){
this.st = st;
}

Sc[] getSt(){
return this.st;
}
}

class Sc {
String クラス = null;
String 名前 = null;
int[] 点数 = null;

Sc(String クラス, String 名前, int[] 点数){
setクラス(クラス);
set名前(名前);
set点数(点数);
}

public void setクラス(String クラス) {
this.クラス = クラス;
}
public String getクラス() {
return クラス;
}

public void set名前(String 名前) {
this.名前 = 名前;
}
public String get名前() {
return 名前;
}

public void set点数(int[] 点数) {
this.点数 = 点数;
}
public int[] get点数() {
return 点数;
}
}

TestDataクラスの中でコンストラクタを呼び出しているクラスが2つ有り、これを追加する必要があります。
クラスの名前はコンストラクタと同じなので、ScとHyoujiです。

Scクラスのコンストラクタは、3つの値(クラスと名前とint型の配列(テストの成績かな?))を引数に取っています。
これを格納するフィールドをそれぞれ用意します。
フィールド名は特に指定されていないので適当に付けました(意味の分かりやすい名前をつけましょう)。
ここではわざと日本語にしています(問題で使用しているメソッド名がScとか意味不明なので)。

Hyoujiクラス(ここはローマ字?統ー性がないにもほどが有るって)は、コンストラクタの引数がScクラスの配列です。
そこで受け取ったScクラスの配列を格納するフィールドを用意しています。
このクラスでは、インスタンス作成時に受け取ったScクラスの配列の要素を全て表示するメソッドallHyouji()が使われていますので、これを作成。
フィールドにセットされたScの配列を全て表示させるのですが、このような処理でtoString()メソッドを使うのは、知ったかっぽくて恥ずかしいので、単純にprint/println()メソッドを使用しました。

この例で使用しているfor文(拡張for文とか、for~each文とか呼ばれます)を初めて見たのであれば、少し調べてみると良いと思います。
通常のfor文よりも使いやすく、何よりint i=0 ... みたいなカウンタ変数がいらなくなるのが便利です。
もちろん使えるとき、使えないときが有りますので、ケース・バイ・ケースで使い分けが必要ですが。

なお、この問題のプログラムは、あくまでも文法の知識を試すためだけのものだと思われます。
Javaのプログラムスタイルとしては最悪ですので、自作プログラミングでは真似しないようにしましょう。
・クラスの名前(フィールドその他もそうですが)が意味不明。読んでクラスの存在理由が分かる名前を使用すべきです。
・クラスの分け方が意味不明。別クラスの情報を表示するだけのHyoujiクラスなど、無意味なクラス分けは控えるべきです。

この回答に投票する

ii3pvy63さん

修正例です。

public class TestDate {
public static void main(String[] args) {
int[] t1 = {45, 65, 43, 96, 42};
int[] t2 = {65, 95, 45, 58, 24};
int[] t3 = {45, 35, 43, 98, 49};
Sc[] sT = {new Sc("1組", "サトウ", t1), new Sc("2組", "ゴトウ", t2), new Sc("3組", "カトウ", t3)};
Hyouji h = new Hyouji(sT);
h.allHyouji();
}
}

public class Sc {
private String cl;
private String name;
private int[] nT;

public Sc(String cl, String name, int[] nT) {
this.cl = cl;
this.name = name;
this.nT = nT;
}

@Override
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append(cl);
buf.append(" ");
buf.append(name);
buf.append(" ");
for (int n : nT) {
buf.append(n);
buf.append(" ");
}
return buf.toString();
}
}

public class Hyouji {
private Sc[] sT;

public Hyouji(Sc[] sT) {
this.sT = sT;
}

public void allHyouji() {
for (Sc sc : sT) {
System.out.println(sc);
}
}
}

この回答に投票する

どの回答もふさわしくない

PR
Yahoo!知恵袋のQ&Aアプリが登場! さくさく検索、かんたんに質問や回答ができる! Yahoo!知恵袋アプリ

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する