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

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

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

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

Q&A

解決済

3回答

1806閲覧

ATMプログラムで口座作成の部分でエラー 助けてください(すぐに解決したいですTT)

huuga

総合スコア9

Java

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

0グッド

0クリップ

投稿2020/11/18 16:37

編集2020/11/18 16:54

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラー: putに適切なメソッドが見つかりません(String) customer.put(name); ^ メソッド Map.put(String,Account)は使用できません (実引数リストと仮引数リストの長さが異なります) メソッド Dictionary.put(String,Account)は使用できません (実引数リストと仮引数リストの長さが異なります) メソッド Hashtable.put(String,Account)は使用できません (実引数リストと仮引数リストの長さが異なります)

java

1import java.util.Hashtable; 2 3public class Bank { 4 5 private Hashtable<String,Account> customer; /* 口座リスト */ 6 private int balance; 7 8 public Bank() { /* 口座リストを初期化する */ 9 10 customer = new Hashtable<String,Account>(); 11 12 } 13 public int open(String name /* 口座名 */) { 14 15 int i=1; 16 17 if(customer.get(name) != null){ 18 return -7; 19 }else{ 20 customer.put(name); 21 balance = 0; 22 i++; 23 return 0; 24 } 25public int close(String name /* 口座名 */) { 26 27 if(customer.get(name) == null){ 28 return -7; 29 }else if(balance != 0){ 30 return -1; 31 }else{ 32 customer.remove(name); 33 return 0; 34 } 35 36 } /* 口座解約 */ 37 38 public int deposit(String name /* 口座名 */, int amount /* 預金額 */){ 39 40 if(customer.get(name) == null){ 41 return -7; 42 }else if(amount <= 0){ 43 return -3; 44 } 45 balance = balance + amount; 46 return 0; 47 48 } /* 預金 */ 49public int withdraw(String name /* 口座名 */, int amount /* 引き出し額 */) { 50 51 if(customer.get(name) == null){ 52 return -7; 53 }else if(amount <= 0){ 54 return -3; 55 }else if(balance < amount){ 56 return -1; 57 } 58 balance = balance - amount; 59 return 0; 60 61 } /* 払い戻し*/ 62 63 public int showBalance(String name /* 口座名 */) { 64 65 if(customer.get(name) == null){ 66 return -7; 67 } 68 return balance; 69 70 } /* 残高照会 */ 71 72import java.util.Hashtable; 73 74public class BankTest{ 75 76 public static void main(String[] args){ 77 78 int modori,kane; 79 80 //インスタンス作成し、bankにputメソッドで追加する 81 Bank haruki = new Bank(); 82 Bank dummy = new Bank(); 83 84 //口座作成 85 modori = haruki.open("春希"); 86 if(modori==0){ 87 System.out.println("口座作成成功で正常です"); 88 }else if(modori==-7){ 89 System.out.println("すでに口座が存在しています"); 90 } 91 System.out.println("\n"); 92 93 //口座作成(同じものを作る) 94 modori = haruki.open("春希"); 95 if(modori==0){ 96 System.out.println("口座作成成功で正常です"); 97 }else if(modori==-7){ 98 System.out.println("すでに口座が存在しています"); 99 } 100 System.out.println("\n"); 101 102 //10000円預金 103 modori = haruki.deposit("春希",10000); 104 if(modori==0){ 105 System.out.println("預金成功で正常です"); 106 }else if(modori==-7){ 107 System.out.println("口座が存在しないです"); 108 }else if(modori==-3){ 109 System.out.println("入金額が0円以下です"); 110 } 111 System.out.println("\n"); 112..............

試したこと

初心者で明日中に解決策を知りたいです
助けてくださいTT
ATMのプログラムです

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答3

0

ベストアンサー

エラーメッセージの通りです。使おうとしているメソッドと、その引数の数がかみ合っていません。
HashTable#putメソッドは、キーとする引数と、それに対応する値の引数の2つの引数を必要とします。
キーだけ渡されても、何と対応付けたらいいのかわからないので、エラーとなります。

そもそも、新たに開発する場合はHashTableではなく、HashMapなどのMapを使うことを推奨されています。

このクラスは、Java 2プラットフォームv1.2の時点でMapインタフェースを実装するように改良された結果、Java Collections Frameworkのメンバーとなりました。新しいコレクションの実装とは異なり、Hashtableは同期をとります。スレッドセーフな実装が必要ない場合は、Hashtableの代わりにHashMapを使用することをお薦めします。スレッドセーフで高度な並列実装が必要な場合は、Hashtableの代わりにConcurrentHashMapを使用することをお薦めします。

投稿2020/11/18 16:54

swordone

総合スコア20651

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

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

huuga

2020/11/18 16:57

お早い回答、本当にありがとうございます! すいません、初心者で大学の課題でHashTableを使用すると指定があるのでやってました。 HashTableを使ってはできないのですか?
huuga

2020/11/18 17:00

Bankは,口座のリストをもつ. 口座リストは,各口座のハッシュテーブルとして定義されている. Bankは,次のクラスで表される.ただし,privateなメソッドは追加しても良い. インスタンス変数はpublicやprivateに関わらず追加してはいけない. これが条件です。どうすればいいでしょうか(´;ω;`)
swordone

2020/11/18 17:02

指定があるならそうするしかないですが、ドキュメントにも記載がある通り、一般論としてHashTableよりもHashMapが推奨されている、というだけの話です。
huuga

2020/11/18 17:08

なるほど。では、値(value)の位置?に何か変数を入れればいいのですか?
swordone

2020/11/18 17:12

そうですね。何を対応させるのか私にはわかりませんが。
huuga

2020/11/18 17:17

うまくいきました!夜分遅くに回答ありがとうございました!何か自分でのキル範囲になかでお礼ができればと思うのですか...
guest

0

private String Myname;をしてcustomer.put(name,Myname);にしたらうまくいきました!

投稿2020/11/18 17:20

huuga

総合スコア9

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

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

0

private Mynameを宣言し、put内の値に入れて解決しました!

投稿2020/11/18 17:18

huuga

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問