投票受付中のQ&A
- ベストアンサーにふさわしい回答に投票してください。
- 投票すると5枚プラスされます。
- ベストアンサーに選ばれた回答に、最初に投票していれば10枚プラスされます。
-
- 残り時間:
- 3時間
-
- 投票数:
- 1票
javaの問題について質問です。
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();
}
}
を入れた場合にどういうメソッド、コンストラクタを追加すれば
良いのでしょうか。
-
- 質問日時:
- 2013/1/11 03:13:52
-
- 残り時間:
- 3時間
-
- 投票開始:
- 2013/1/18 04:18:53
-
- 投票数:
- 1
-
- 回答数:
- 2
-
- お礼:
- 知恵コイン
- 500枚
-
- 閲覧数:
- 216
-
- ソーシャルブックマークへ投稿:
- Yahoo!ブックマークへ投稿
- はてなブックマークへ投稿
- (ソーシャルブックマークとは)
回答
(2件中1〜2件)
- 並べ替え:回答日時の
- 新しい順
- |
- 古い順
質問に記載されていたクラスの名前は、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クラスなど、無意味なクラス分けは控えるべきです。
- 違反報告
- 回答日時:2013/1/12 17:40:03
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);
}
}
}
- 違反報告
- 回答日時:2013/1/11 11:00:52