成績表を作りたい。Studentのクラスを要素とするクラスStackを完成させてプログラムが動作するようにせよという問題なのですがprivateの物をどうやって要素にすればよいのでしょうか?
class Student
{
private int id;
private String name;
private int eng;
private int math;
private int kokugo;
Student(int i,String nm,int e,int m,int k)
{
id=i;name=nm;eng=e;math=m;kokugo=k;
}
void show(){
System.out.println("("+id+","+name+","+ eng+","+ math+","+ kokugo+")");
}
}
class Stack
{
}
class Sample
{
public static void main(String[] args)
{
Stack ss=new Stack(3);
ss.push(new Student(1,"A",10,10,10));
ss.push(new Student(2,"B",20,10,10));
ss.push(new Student(3,"C",30,10,10));
ss.push(new Student(4,"D",40,10,10));
ss.pop();
ss.pop();
ss.pop();
ss.pop();
}
}
No.8ベストアンサー
- 回答日時:
>System.out.println(student);
このようにすると、オブジェクトのtoString()メソッドが暗黙に呼び出されます。
ご指摘の表示はObject#toString()の動作によるものです。
別の表示をしたければtoString()をオーバーライドするか、別のメソッドを定義する必要があります。
例えばStudentクラスにshow()などというメソッドを定義し、その中で表示の処理をすれば、
student.show();
として表示することができます。
この回答への補足
pushの場合はStudentクラスにshowを作成して以下のようにしたらできました。
class Student
{
private int id;
private String name;
private int eng;
private int math;
private int kokugo;
Student(int i,String nm,int e,int m,int k)
{
id=i;name=nm;eng=e;math=m;kokugo=k;
}
void show()
{
System.out.println("("+id+","+name+","+ eng+","+ math+","+ kokugo+")");
}
}
public void push(Student student)
{
if(sp!=students.length)
{
student.show();
System.out.println("をpush");
students[sp++]=student;
}
else
{
System.out.println("Stack is full");
}
}
class Sample
{
public static void main(String[] args)
{
Stack ss=new Stack(3);
ss.push(new Student(1,"黒川富夫",10,10,10));
ss.push(new Student(2,"川本隆文",20,10,10));
ss.push(new Student(3,"山下健史",30,10,10));
ss.push(new Student(4,"丹原元治",40,10,10));
ss.pop();
ss.pop();
ss.pop();
ss.pop();
}
}
popの場合の出力はどうしたらいいのでしょうか?
No.7
- 回答日時:
そのとおりです。
そこまでわかっていて、何故できないかわかりませんが、
あまり長くなってもいけないので。
おっしゃる通りpushメソッドはStudentクラスのインスタンスを引数とします。
つまり、メソッドの宣言は
push(Student student)
となります。
また、受け取ったStudentオブジェクトは記憶しておかないといけません。
つまり、
Studentの配列に格納することになります。
Student[] students=new
Student[10];
となります。
わかりましたでしょうか?
この回答への補足
解説の通り進めていったらエラーは全て無くなったと思います。
しかし出力をすると
Student@1a758cb
をpush
という風になってしまいます。
代入した内容を出力するにはどうしたらいいのでしょうか?
pushの内容は以下の通りです
public void push(Student student)
{
if(sp!=students.length)
{
System.out.println(student);
System.out.println("をpush");
students[sp++]=student;
}
else
{
System.out.println("Stack is full");
}
}
本当に長くなってしまって申し訳ありません。
No.5
- 回答日時:
間違いに気が付いたなら、それを直せば完了でしょう?
構造に関しては、おっしゃる通りです。
「先入れ後出し」とも言います。
このような話は情報処理では基本的なことですので、しっかりと勉強しておいたほうがいいでしょう。
No.4
- 回答日時:
> Sample.java:59: push(int) (Stack 内) を (Student) に適用できません
Studentクラスとint型には、型変換できるような互換性も親子関係も無いですから、push(int型)をpush(Studentクラス)と使おうとしても、Studentをintにできません、ってことです。
「foo(A,B,...)を(a,b,..)に適用できません」のエラーは、このような、定義されているものと使おうとしているもので、型が合わないときに出るものです。
そもそも、Studentクラスを扱うスタックを作るのに、なんでintなんですか?
> スタック自体は仕切りの付いた箱のような物でしょうか?
違います。
「データ構造 スタック」で検索するか、「データ構造」について書かれた本をよく読んでください。
この回答への補足
>そもそも、Studentクラスを扱うスタックを作るのに、なんでintなんですか?
後々見直したらその部分がおかしいと気付きました。
pushの引数はStudentクラスで設定したものを入れればいいのでしょうか?
スタックは下から順に積み上げて上から取り出すという構造だということでしょうか?
No.3
- 回答日時:
「スタック」というのがどんなものかわかっていないのでは?
まず、「スタック」とは何かを調べてみましょう。
それと、SampleクラスでStackクラスを使っているのだから、それと整合性がとれるように
実装していけばいい。
この回答への補足
スタック自体は仕切りの付いた箱のような物でしょうか?
自分なりに作っていったのですが、
Sample.java:59: push(int) (Stack 内) を (Student) に適用できません
ss.push(new Student(1,"a",2,3,4));
^
Sample.java:60: push(int) (Stack 内) を (Student) に適用できません
ss.push(new Student(2,"b",2,3,4));
^
Sample.java:61: push(int) (Stack 内) を (Student) に適用できません
ss.push(new Student(3,"c",2,3,4));
^
Sample.java:62: push(int) (Stack 内) を (Student) に適用できません
ss.push(new Student(4,"d",2,3,4));
というエラーが出てしまいます。どういう意味のエラーなんでしょうか?
Stackクラスは以下です。
class Stack
{
private int stack[];
private int sp=0;
public Stack(int i)
{
stack = new int[i];
System.out.println("大きさ"+i+"のスタックを作りました");
}
public void push(int item)
{
if(sp!=stack.length)
{
System.out.println(item+"をpush");
stack[sp++] = item;
}
else
{
System.out.println("Stack is full");
}
}
public int pop()
{
if(sp>0){
System.out.println(stack[--sp]+"をpop");
return stack[sp];
}
else
System.out.println("Stack is empty");
return -1;
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel vbaのプログラムでガンマ...
-
compareToにおける「自然順序付...
-
Daoクラスはまとめるべきですか
-
JTextFieldの入力制限
-
ASP.NETでの共通コードの書き方...
-
インタフェースのstatic変数(Java)
-
(vba)他のアプリケーションの右...
-
「インターフェイス」って何の...
-
スタックで成績表を作るプログ...
-
C++で参照カウンタを実装したい...
-
C# 「データが失なわれる可能性...
-
VC#2008自作クラスメソッドツー...
-
Commons-Discovery.jarとは?
-
Java難しすぎ
-
「IOException は対応する try ...
-
「タイプ初期化子が例外をスロ...
-
エクセルVBAで、条件に一致する...
-
C#で設定時刻到来時にイベント...
-
インスタンス参照でアクセスで...
-
VB.NET getとsetの概念がわかり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
interface,extend,implementの...
-
C# 「データが失なわれる可能性...
-
「ラッパークラス」の存在意義...
-
c++でのヘッダーファイルの循環...
-
(vba)他のアプリケーションの右...
-
JavaでのAPIの覚え方ってみさな...
-
ゲッターを使わないで変数にア...
-
「IOException は対応する try ...
-
「継承されたメソッドの可視性...
-
Javaで下線
-
Javaのインスタンス化の構文の...
-
VB DLLプロジェクトについて
-
【C#】クラスのコンストラクタ...
-
ASP.NETでの共通コードの書き方...
-
委譲って何ですか?
-
オーバーライドとラッパーの違い
-
抽象クラスをJUNITでテストする...
-
JTextFieldの入力制限
-
Commons-Discovery.jarとは?
-
setTextについて
おすすめ情報