ざっくりですが、元のコードから解説します。
元のコードはCではなくC++です。
※C言語系統に触れるのは久しぶりなので
インデント等に不備があるかもしれません。ご了承下さい。
/*
前提:
(複数可)会社名とパスワード、預金額を入力し、
預金額に対して引き出し(複数可)を行い、各会社の残高を表示するプログラム
*/
// Javaのimportとほぼ同様
#include <iostream>
#include <map>
#include <string>
#include <vector>
// 名前空間の宣言(std:: 記述省略のため) => 特に気にしなくて大丈夫です
using namespace std;
int main() {
int N, K;
/*
・C++の標準入力(cin)でNとKを入力する
・Nが会社の数
・Kが預金から引き出す回数
*/
cin >> N >> K;
// 会社名
vector<string> company(N);
// パスワード
map<string, string> password;
// 預金額
map<string, int> deposit;
// N数の会社分「会社名」「パスワード」「預金額」を入力する
for (int i = 0; i < N; i++) {
int money;
string pass;
cin >> company[i] >> pass >> money;
password[company[i]] = pass;
deposit[company[i]] = money;
}
// K回分預金額から引き出す
for (int i = 0; i < K; i++) {
// g:会社名, m:パスワード, p:引出し額
string g, m;
int p;
// 「会社名」「パスワード」「引出し額」を入力する
cin >> g >> m >> p;
// 入力したパスワードが会社名にMapで紐付けられているパスワードと一致したら
if (m == password[g]) {
// 「預金額」から「引出し額」を差し引く
deposit[g] -= p;
}
}
for (int i = 0; i < N; i++) {
// 各会社の名前と預金残高を出力する
cout << company[i] << " " << deposit[company[i]] << endl;
}
}
雑ですが、変換の一例です。(可読性等、度外視なので本当に雑です)
※元のコードに解説コメントを記述したのでこちらは記述しません
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N, K;
N = scanner.nextInt();
K = scanner.nextInt();
scanner.nextLine();
String[] company = new String[N];
Map<String, String> password = new HashMap<>();
Map<String, Integer> deposit = new HashMap<>();
for (int i = 0; i < N; i++) {
String line = scanner.nextLine();
String[] tokens = line.split(" ");
company[i] = tokens[0];
password.put(company[i], tokens[1]);
deposit.put(company[i], Integer.parseInt(tokens[2]));
}
for (int i = 0; i < K; i++) {
String line = scanner.nextLine();
String[] tokens = line.split(" ");
String g = tokens[0];
String m = tokens[1];
int p = Integer.parseInt(tokens[2]);
if (m.equals(password.get(g))) {
deposit.put(g, deposit.get(g) - p);
}
}
for (int i = 0; i < N; i++) {
System.out.println(company[i] + " " + deposit.get(company[i]));
}
scanner.close();
}
}
何も例外処理等を施していないので
以下の形式で入力しないと例外を吐きます。(値は一例です)
コンソールでの入出力例
# 入力:会社の数
1(整数) => [Enter] キー押下
# 入力:引き出す回数
1(整数) => [Enter] キー押下
# 入力:会社名 パスワード 預金残高(半角空白区切り)
foocompany(文字列) password(文字列) 100000(int表現を含むString) => [Enter] キー押下
# 入力:会社名 パスワード 引出し額(半角空白区切り)
foocompany(文字列) password(文字列) 8000(int表現を含むString) => [Enter] キー押下
# 出力:会社名と預金残高
foocompany 92000
少しでもイメージし易くなれば幸いです。