質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

3回答

1305閲覧

コンストラクタの引数を外部入力にするには?

ksk_2200

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/08/30 08:01

銀行の簡単なプログラムを考えております。
最初のメインメソッドで入金、出金、振込の選択肢で聞き、入力によって各動作をするプログラムを作ろうとしています。
現在入金のクラスを作っているのですが、うまく連動しません。
他クラスにコンストラクタを設定して、メインメソッドでnewして引数を外部入力して渡したいのですが、うまくいきません。
具体的にいうと入金を選択された後に入金のクラスを呼び出してコンストラクタにint型で引数を設定しているものにメインメソッドから入金金額として渡したいのですがうまくいきません。
それとくわえて入金などの一連の動作を終えた後にメインメソッドの最初、選択肢を聞く場面に戻りたいのですが、なにか案はございますでしょうか。
アドバイスでよろしいのでなにか助言をくださらないでしょうか。

コンソール画面では、入金インスタンスを生成して引数で入金金額を渡しているつもりなんですが、toStringで確認すると、番地になってしまいます。

Java

1import java.util.Scanner; 2 3public class Bank_main { 4 5 6 public static void main(String[]args){ 7 int cv=0; 8 System.out.println("ご利用ありがとうございます。どちらをご利用されますか?現在の残高は"+cv+"円です。"); 9 System.out.println("1:入金 2:出金 3:振込"); 10 11 int input=new Scanner(System.in).nextInt(); 12 if(input==1){ 13 System.out.println("入金金額を入力してください。"); 14 15 Nyuukin n=new Nyuukin(new Scanner(System.in).nextInt()); 16 System.out.println(n); 17 18 if(input==2){ 19 } 20 21 if(input==3){ 22 23 }else{ 24 System.out.println("入力が読み込めません。正しい数字を入力してください"); 25 } 26 } 27 } 28 29} 30//入金クラス 31class Nyuukin { 32 33 private int ny; 34//コンストラクタ 35public Nyuukin (int nm){ 36 this.ny=nm; 37} 38 public int getNy() { 39 return ny; 40 } 41 42 public void setNy(int ny) { 43 this.ny = ny; 44 } 45 public String toString(int nm){ 46 47 return " "+nm+" "; 48 } 49} 50 51 52 53 54 55 56 57 58 59 60コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

toStringを正しくオーバーロードできていません。

Object.toString引数を取りませんので、引数を取るtoStringを実装しても、それは別物とみなされて、toString()を呼んでも使われません(デフォルトのObject.toStringが呼ばれます)。

投稿2017/08/30 08:08

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

toStringをオーバーライド出来ていないのでは。

Java

1public String toString(int nm){ 2  return " "+nm+" "; 3}

以下のように書き換えてください。

Java

1public String toString() { 2 return " " + this.ny + " "; 3}

アノテーションを付けるようにすれば、間違ったオーバーライドをエラーに出来ます。

Java

1@Override // エラー! 2public String toString(int nm){ 3 return " "+nm+" "; 4}

投稿2017/08/30 08:06

編集2017/08/30 08:09
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Javaは余り使ってないのでそれほど詳しくはないですが、JavaのScannerは、入力の都度newするのではなく、一旦オブジェクトをScannerで受け取り、その後そのオブジェクトを使ってnextInt()などを呼び出さないと行けないと思います。

例えば以下のような感じです。

java

1import java.util.Scanner; 2 3class testScanner2{ 4 public static void main(String args[]){ 5 System.out.println("数値を入力して下さい。"); 6 7 Scanner scan = new Scanner(System.in); 8 9 int val = scan.nextInt(); 10 System.out.println("最初の数値のトークンは: "+ val); 11 12 val = scan.nextInt(); 13 System.out.println("次の数値のトークンは : "+ val); 14 } 15}

また、処理が終わったら元のメッセーに戻りたいとのことですが、while文で全体を囲って無限ループにしておき、メニューとして4:終了を追加して、4が入力されたらwhileループから抜けるようにすればいいと思います。

投稿2017/08/30 08:16

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問