0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

paizaラーニングレベルアップ問題集の「クラス」をやってみた (1)

Posted at

paizaラーニングレベルアップ問題集の「クラス」をやってみました。


問題
クラスの作成

コンストラクタ

クラスのメンバの更新


2問目、3問目は、前問との差分を色付けしています。


C
クラスの作成
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
	int number;
	char name[20];
} Employee;

int getNum(const Employee* employee) {
	return employee->number;
}

const char* getName(const Employee* employee) {
	return employee->name;
}

int main() {
	int N;
	scanf("%d", &N);
	Employee** employees = NULL;
	size_t size = 0;
	while (N--) {
		char s[12];
		scanf("%s", s);
		if (!strcmp(s, "make")) {
			int number;
			char name[20];
			scanf("%d %s", &number, name);
			employees = (Employee**)realloc(employees, sizeof(Employee*) * (size + 1));
			employees[size] = (Employee*) malloc(sizeof(Employee));
			employees[size]->number = number;
			strcpy(employees[size]->name, name);
			size++;
		} else if (!strcmp(s, "getnum")) {
			size_t n;
			scanf("%zu", &n);
			n -= 1;
			printf("%d\n", getNum(employees[n]));
		} else if (!strcmp(s, "getname")) {
			size_t n;
			scanf("%zu", &n);
			n -= 1;
			printf("%s\n", getName(employees[n]));
		}
	}
	while (size) {
		free(employees[--size]);
	}
	free(employees);
	employees = NULL;
	return 0;
}
コンストラクタ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
	int number;
	char name[20];
} Employee;

+Employee* create_employee(int num, const char* name) {
+	Employee* employee = (Employee*)malloc(sizeof(Employee));
+	if (employee == NULL) {
+		abort();
+	}
+	employee->number = num;
+	strcpy(employee->name, name);
+	return employee;
+}

int getNum(const Employee* employee) {
	return employee->number;
}

const char* getName(const Employee* employee) {
	return employee->name;
}

+void destroy_employee(Employee* employee) {
+	if (employee != NULL) {
+		free(employee);
+	}
+}

int main() {
	int N;
	scanf("%d", &N);
	Employee** employees = NULL;
	size_t size = 0;
	while (N--) {
		char s[12];
		scanf("%s", s);
		if (!strcmp(s, "make")) {
			int number;
			char name[20];
			scanf("%d %s", &number, name);
			employees = (Employee**)realloc(employees, sizeof(Employee*) * (size + 1));
-			employees[size] = (Employee*) malloc(sizeof(Employee));
-			employees[size]->number = number;
-			strcpy(employees[size]->name, name);
-			size++;
+			employees[size++] = create_employee(number, name);
		} else if (!strcmp(s, "getnum")) {
			size_t n;
			scanf("%zu", &n);
			n -= 1;
			printf("%d\n", getNum(employees[n]));
		} else if (!strcmp(s, "getname")) {
			size_t n;
			scanf("%zu", &n);
			n -= 1;
			printf("%s\n", getName(employees[n]));
		}
	}
	while (size) {
-		free(employees[--size]);
+		destroy_employee(employees[--size]);
	}
	free(employees);
	employees = NULL;
	return 0;
}
クラスのメンバの更新
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
	int number;
	char name[20];
} Employee;

Employee* create_employee(int num, const char* name) {
	Employee* employee = (Employee*)malloc(sizeof(Employee));
	if (employee == NULL) {
		abort();
	}
	employee->number = num;
	strcpy(employee->name, name);
	return employee;
}

int getNum(const Employee* employee) {
	return employee->number;
}

const char* getName(const Employee* employee) {
	return employee->name;
}

+void setNum(Employee* employee, int num) {
+	employee->number = num;
+}

+void setName(Employee* employee, const char* name) {
+	strcpy(employee->name, name);
+}

void destroy_employee(Employee* employee) {
	if (employee != NULL) {
		free(employee);
	}
}

int main() {
	int N;
	scanf("%d", &N);
	Employee** employees = NULL;
	size_t size = 0;
	while (N--) {
		char s[12];
		scanf("%s", s);
		if (!strcmp(s, "make")) {
			int number;
			char name[20];
			scanf("%d %s", &number, name);
			employees = (Employee**)realloc(employees, sizeof(Employee*) * (size + 1));
			employees[size++] = create_employee(number, name);
		} else if (!strcmp(s, "getnum")) {
			size_t n;
			scanf("%zu", &n);
			n -= 1;
			printf("%d\n", getNum(employees[n]));
		} else if (!strcmp(s, "getname")) {
			size_t n;
			scanf("%zu", &n);
			n -= 1;
			printf("%s\n", getName(employees[n]));
+		} else if (!strcmp(s, "change_num")) {
+			size_t n;
+			int new_num;
+			scanf("%zu %d", &n, &new_num);
+			n -= 1;
+			setNum(employees[n], new_num);
+		} else if (!strcmp(s, "change_name")) {
+			size_t n;
+			char new_name[20];
+			scanf("%zu %s", &n, new_name);
+			n -= 1;
+			setName(employees[n], new_name);
		}
	}
	while (size) {
		destroy_employee(employees[--size]);
	}
	free(employees);
	employees = NULL;
	return 0;
}

C++
クラスの作成
#include <iostream>
#include <vector>
using namespace std;

class Employee {
public:
    int number;
	string name;

	int getNum() const {
		return number;
	}

	string getName() const {
		return name;
	}
};

int main() {
	int n;
	cin >> n;
	vector<Employee*> employees;
	while (n--) {
		string s;
		cin >> s;
		if (s == "make") {
			Employee* employee = new Employee();
			cin >> employee->number >> employee->name;
			employees.push_back(employee);
		} else if (s == "getnum") {
			int n;
			cin >> n;
			n -= 1;
			cout << employees[n]->getNum() << endl;
		} else if (s == "getname") {
			int n;
			cin >> n;
			n -= 1;
			cout << employees[n]->getName() << endl;
		}
	}
	for (Employee* employee : employees) delete employee;
	return 0;
}
コンストラクタ
#include <iostream>
#include <vector>
using namespace std;

class Employee {
-public:
    int number;
	string name;

+public:
+	Employee(int num, string name) : number(num), name(name) {}

	int getNum() const {
		return number;
	}

	string getName() const {
		return name;
	}
};

int main() {
	int n;
	cin >> n;
	vector<Employee*> employees;
	while (n--) {
		string s;
		cin >> s;
		if (s == "make") {
-			Employee* employee = new Employee();
-			cin >> employee->number >> employee->name;
-			employees.push_back(employee);
+			int num;
+			string name;
+			cin >> num >> name;
+			employees.push_back(new Employee(num, name));
		} else if (s == "getnum") {
			int n;
			cin >> n;
			n -= 1;
			cout << employees[n]->getNum() << endl;
		} else if (s == "getname") {
			int n;
			cin >> n;
			n -= 1;
			cout << employees[n]->getName() << endl;
		}
	}
	for (Employee* employee : employees) delete employee;
	return 0;
}
クラスのメンバの更新
#include <iostream>
#include <vector>
using namespace std;

class Employee {
	int number;
	string name;

public:
	Employee(int num, string name) : number(num), name(name) {}

	int getNum() const {
		return number;
	}

	string getName() const {
		return name;
	}

+	void setNum(int num) {
+		this->number = num;
+	}

+	void setName(const string& name) {
+		this->name = name;
+	}
}

int main() {
	int n;
	cin >> n;
	vector<Employee*> employees;
	while (n--) {
		string s;
		cin >> s;
		if (s == "make") {
			int num;
			string name;
			cin >> num >> name;
			employees.push_back(new Employee(num, name));
		} else if (s == "getnum") {
			int n;
			cin >> n;
			n -= 1;
			cout << employees[n]->getNum() << endl;
		} else if (s == "getname") {
			int n;
			cin >> n;
			n -= 1;
			cout << employees[n]->getName() << endl;
+		} else if (s == "change_num") {
+			int n, num;
+			cin >> n >> num;
+			n -= 1;
+			employees[n]->setNum(num);
+		} else if (s == "change_name") {
+			int n;
+			string name;
+			cin >> n >> name;
+			n -= 1;
+			employees[n]->setName(name);
		}
	}
	for (Employee* employee : employees) delete employee;
	return 0;
}

C#
クラスの作成
using System;
using System.Collections.Generic;

public class Employee
{
    public int number;
    public int GetNum()
    {
        return number;
    }

    public string name;
    public string GetName()
    {
        return name;
    }
}

class Program
{
	public static void Main()
	{
		List<Employee> employees = new List<Employee>();
		for (int i = int.Parse(Console.ReadLine()); i > 0; i--) {
			string[] query = Console.ReadLine().Split();
			if ("make".Equals(query[0])) {
                Employee employee = new Employee();
				employee.number = int.Parse(query[1]);
				employee.name = query[2];
				employees.Add(employee);
			} else if ("getnum".Equals(query[0])) {
				int n = int.Parse(query[1]) - 1;
				Console.WriteLine(employees[n].GetNum());
			} else if ("getname".Equals(query[0])) {
				int n = int.Parse(query[1]) - 1;
				Console.WriteLine(employees[n].GetName());
			}
		}
	}
}
コンストラクタ
using System;
using System.Collections.Generic;

class Employee
{
-	public int number;
-	public int GetNum()
-	{
-		return number;
-	}
+	public int Number { get; }

-	public string name;
-	public string GetName()
-	{
-		return name;
-	}
+	public string Name { get; }

+	public Employee(int num, string name)
+	{
+		Number = num;
+		Name = name;
+	}
}

class Program
{
	public static void Main()
	{
		List<Employee> employees = new List<Employee>();
		for (int i = int.Parse(Console.ReadLine()); i > 0; i--) {
			string[] query = Console.ReadLine().Split();
			if ("make".Equals(query[0])) {
-				Employee employee = new Employee();
-				employee.number = int.Parse(query[1]);
-				employee.name = query[2];
-				employees.Add(employee);
+				int num = int.Parse(query[1]);
+				int name = query[2];
+				employees.Add(new Employee(num, name));
			} else if ("getnum".Equals(query[0])) {
				int n = int.Parse(query[1]) - 1;
-				Console.WriteLine(employees[n].GetNum());
+				Console.WriteLine(employees[n].Number);
			} else if ("getname".Equals(query[0])) {
				int n = int.Parse(query[1]) - 1;
-				Console.WriteLine(employees[n].GetName());
+				Console.WriteLine(employees[n].Name);
			}
		}
	}
}
クラスのメンバの更新
using System;
using System.Collections.Generic;

class Employee
{
-	public int Number { get; }
+	public int Number { get; set; }
-	public string Name { get; }
+	public string Name { get; set; }

	public Employee(int num, string name)
	{
		Number = num;
		Name = name;
	}
}

class Program
{
	public static void Main()
	{
		List<Employee> employees = new List<Employee>();
		for (int i = int.Parse(Console.ReadLine()); i > 0; i--) {
			string[] query = Console.ReadLine().Split();
			if ("make".Equals(query[0])) {
				int num = int.Parse(query[1]);
				int name = query[2];
				employees.Add(new Employee(num, name));
			} else if ("getnum".Equals(query[0])) {
				int n = int.Parse(query[1]) - 1;
				Console.WriteLine(employees[n].Number);
			} else if ("getname".Equals(query[0])) {
				int n = int.Parse(query[1]) - 1;
				Console.WriteLine(employees[n].Name);
+			} else if ("change_num".Equals(query[0])) {
+				int n = int.Parse(query[1]) - 1;
+				int num = int.Parse(query[2]);
+				employees[n].Number = num;
+			} else if ("change_name".Equals(query[0])) {
+				int n = int.Parse(query[1]) - 1;
+				string name = query[2];
+				employees[n].Name = name;
			}
		}
	}
}

Go
クラスの作成
package main
import "fmt"

type Employee struct {
	number int
	name   string
}

func (e *Employee) GetNum() int {
	return e.number
}

func (e *Employee) GetName() string {
	return e.name
}

func main() {
	var n int
	fmt.Scan(&n)
	employees := []*Employee{}
	for i := 0; i < n; i++ {
		var s string
		fmt.Scan(&s)
		if s == "make" {
			employee := &Employee{}
			fmt.Scan(&employee.number, &employee.name)
			employees = append(employees, employee)
		} else if s == "getnum" {
			var k int
			fmt.Scan(&k)
			k -= 1
			fmt.Println(employees[k].GetNum())
		} else if s == "getname" {
			var k int
			fmt.Scan(&k)
			k -= 1
			fmt.Println(employees[k].GetName())
		}
	}
}
コンストラクタ
package main
import "fmt"

type Employee struct {
	number int
	name   string
}

+func NewEmployee(num int, name string) *Employee {
+	return &Employee{number: num, name: name}
+}

func (e *Employee) GetNum() int {
	return e.number
}

func (e *Employee) GetName() string {
	return e.name
}

func main() {
	var n int
	fmt.Scan(&n)
	employees := []*Employee{}
	for i := 0; i < n; i++ {
		var s string
		fmt.Scan(&s)
		if s == "make" {
-			employee := &Employee{}
-			fmt.Scan(&employee.number, &employee.name)
-			employees = append(employees, employee)
+			var num int
+			var name string
+			fmt.Scan(&num, &name)
+			employees = append(employees, NewEmployee(num, name))
		} else if s == "getnum" {
			var k int
			fmt.Scan(&k)
			k -= 1
			fmt.Println(employees[k].GetNum())
		} else if s == "getname" {
			var k int
			fmt.Scan(&k)
			k -= 1
			fmt.Println(employees[k].GetName())
		}
	}
}
クラスのメンバの更新
package main
import "fmt"

type Employee struct {
	number int
	name   string
}

func NewEmployee(num int, name string) *Employee {
	return &Employee{number: num, name: name}
}

func (e *Employee) GetNum() int {
	return e.number
}

func (e *Employee) GetName() string {
	return e.name
}

+func (e *Employee) SetNum(num int) {
+	e.number = num
+}

+func (e *Employee) SetName(name string) {
+	e.name = name
+}

func main() {
	var n int
	fmt.Scan(&n)
	employees := []*Employee{}
	for i := 0; i < n; i++ {
		var s string
		fmt.Scan(&s)
		if s == "make" {
			var num int
			var name string
			fmt.Scan(&num, &name)
			employees = append(employees, NewEmployee(num, name))
		} else if s == "getnum" {
			var k int
			fmt.Scan(&k)
			k -= 1
			fmt.Println(employees[k].GetNum())
		} else if s == "getname" {
			var k int
			fmt.Scan(&k)
			k -= 1
			fmt.Println(employees[k].GetName())
+		} else if s == "change_num" {
+			var k, num int
+			fmt.Scan(&k, &num)
+			k -= 1
+			employees[k].SetNum(num)
+		} else if s == "change_name" {
+			var k int
+			var name string
+			fmt.Scan(&k, &name)
+			k -= 1
+			employees[k].SetName(name)
		}
	}
}

Java
クラスの作成
import java.util.*;

class Employee {
	public int number;
	public String name;

	public int getNum() {
		return number;
	}

	public String getName() {
		return name;
	}
}

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		ArrayList<Employee> employees = new ArrayList<>();
		for (int i = sc.nextInt(); i > 0; i--) {
			String s = sc.next();
			if ("make".equals(s)) {
				Employee employee = new Employee();
				employee.number = sc.nextInt();
				employee.name = sc.next();
				employees.add(employee);
			} else if ("getnum".equals(s)) {
				System.out.println(employees.get(sc.nextInt()-1).getNum());
			} else if ("getname".equals(s)) {
				System.out.println(employees.get(sc.nextInt()-1).getName());
			}
		}
		sc.close();
	}
}
コンストラクタ
import java.util.*;

class Employee {
-	public int number;
+	private int number;
-	public String name;
+	private String name;

+	public Employee(int num, String name) {
+		this.number = num;
+		this.name = name;
+	}

	public int getNum() {
		return number;
	}

	public String getName() {
		return name;
	}
}

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		ArrayList<Employee> employees = new ArrayList<>();
		for (int i = sc.nextInt(); i > 0; i--) {
			String s = sc.next();
			if ("make".equals(s)) {
-				Employee employee = new Employee();
-				employee.number = sc.nextInt();
-				employee.name = sc.next();
-				employees.add(employee);
+				employees.add(new Employee(sc.nextInt(), sc.next()));
			} else if ("getnum".equals(s)) {
				System.out.println(employees.get(sc.nextInt()-1).getNum());
			} else if ("getname".equals(s)) {
				System.out.println(employees.get(sc.nextInt()-1).getName());
			}
		}
		sc.close();
	}
}
クラスのメンバの更新
import java.util.*;

class Employee {
	private int number;
	private String name;

	public Employee(int num, String name) {
		this.number = num;
		this.name = name;
	}

	public int getNum() {
		return number;
	}

	public String getName() {
		return name;
	}

+	public void setNum(int num) {
+		this.number = num;
+	}

+	public void setName(String name) {
+		this.name = name;
+	}
}

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		ArrayList<Employee> employees = new ArrayList<>();
		for (int i = sc.nextInt(); i > 0; i--) {
			String s = sc.next();
			if ("make".equals(s)) {
				employees.add(new Employee(sc.nextInt(), sc.next()));
			} else if ("getnum".equals(s)) {
				System.out.println(employees.get(sc.nextInt()-1).getNum());
			} else if ("getname".equals(s)) {
				System.out.println(employees.get(sc.nextInt()-1).getName());
+			} else if ("change_num".equals(s)) {
+				employees.get(sc.nextInt()-1).setNum(sc.nextInt());
+			} else if ("change_name".equals(s)) {
+				employees.get(sc.nextInt()-1).setName(sc.next());
			}
		}
		sc.close();
	}
}

JavaScript
クラスの作成
class Employee {
	get number() {
		return this._number;
	}

	get name() {
		return this._name;
	}
}

const [N, ...S] = require("fs").readFileSync("/dev/stdin", "utf8").trim().split('\n');
const employees = [];
for (var i = 0; i < Number(N); i++) {
	const query = S[i].split(' ');
	if (query[0] === "make") {
		const employee = new Employee();
		employee._number = Number(query[1]);
		employee._name = query[2];
		employees.push(employee);
	} else if (query[0] === "getnum") {
		const n = Number(query[1]) - 1;
		console.log(employees[n].number);
	} else if (query[0] === "getname") {
		const n = Number(query[1]) - 1;
		console.log(employees[n].name);
	}
}
コンストラクタ
class Employee {
+	constructor(num, name) {
+		this._number = num;
+		this._name = name;
+	}

	get number() {
		return this._number;
	}

	get name() {
		return this._name;
	}
}

const [N, ...S] = require("fs").readFileSync("/dev/stdin", "utf8").trim().split('\n');
const employees = [];
for (var i = 0; i < Number(N); i++) {
	const query = S[i].split(' ');
	if (query[0] === "make") {
-		const employee = new Employee();
-		employee._number = Number(query[1]);
-		employee._name = query[2];
-		employees.push(employee);
+		employees.push(new Employee(Number(query[1]), query[2]));
	} else if (query[0] === "getnum") {
		const n = Number(query[1]) - 1;
		console.log(employees[n].number);
	} else if (query[0] === "getname") {
		const n = Number(query[1]) - 1;
		console.log(employees[n].name);
	}
}
クラスのメンバの更新
class Employee {
	constructor(num, name) {
		this._number = num;
		this._name = name;
	}

	get number() {
		return this._number;
	}

+	set number(value) {
+		this._number = value;
+	}

	get name() {
		return this._name;
	}

+	set name(value) {
+		this._name = value;
+	}
}

const [N, ...S] = require("fs").readFileSync("/dev/stdin", "utf8").trim().split('\n');
for (var i = 0; i < Number(N); i++) {
	const query = S[i].split(' ');
	const employees = [];
	if (query[0] === "make") {
		employees.push(new Employee(Number(query[1]), query[2]));
	} else if (query[0] === "getnum") {
		const n = Number(query[1]) - 1;
		console.log(employees[n].number);
	} else if (query[0] === "getname") {
		const n = Number(query[1]) - 1;
		console.log(employees[n].name);
+	} else if (query[0] === "change_num") {
+		const n = Number(query[1]) - 1;
+		const num = Number(query[2]);
+		employees[n].number = num;
+	} else if (query[0] === "change_name") {
+		const n = Number(query[1]) - 1;
+		const name = query[2];
+		employees[n].name = name;
	}
}

Kotlin
クラスの作成
class Employee(
	var number: Int = 0,
	var name: String = ""
)

fun main() {
	val employees = mutableListOf<Employee>()
	repeat (readln().toInt()) {
		val query = readln().split(' ')
		if ("make".equals(query[0])) {
			val num = query[1].toInt()
			val name = query[2]
			val employee = Employee()
			employee.number = num
			employee.name = name
			employees.add(employee)
		} else if ("getnum".equals(query[0])) {
			val n = query[1].toInt() - 1
			println(employees[n].number)
		} else if ("getname".equals(query[0])) {
			val n = query[1].toInt() - 1
			println(employees[n].name)
		}
	}
}
コンストラクタ
class Employee(
-	var number: Int = 0,
+	val number: Int,
-	var name: String = ""
+	val name: String
)

fun main() {
	val employees = mutableListOf<Employee>()
	repeat (readln().toInt()) {
		val query = readln().split(' ')
		if ("make".equals(query[0])) {
			val num = query[1].toInt()
			val name = query[2]
-			val employee = Employee()
-			employee.number = num
-			employee.name = name
-			employees.add(employee)
+			employees.add(Employee(num, name))
		} else if ("getnum".equals(query[0])) {
			val n = query[1].toInt() - 1
			println(employees[n].number)
		} else if ("getname".equals(query[0])) {
			val n = query[1].toInt() - 1
			println(employees[n].name)
		}
	}
}
クラスのメンバの更新
class Employee(
-	val number: Int,
+	var number: Int,
-	val name: String
+	var name: String
)

fun main() {
	val employees = mutableListOf<Employee>()
	repeat (readln().toInt()) {
		val query = readln().split(' ')
		if ("make".equals(query[0])) {
			val num = query[1].toInt()
			val name = query[2]
			employees.add(Employee(num, name))
		} else if ("getnum".equals(query[0])) {
			val n = query[1].toInt() - 1
			println(employees[n].number)
		} else if ("getname".equals(query[0])) {
			val n = query[1].toInt() - 1
			println(employees[n].name)
+		} else if ("change_num".equals(query[0])) {
+			val n = query[1].toInt() - 1
+			val num = query[2].toInt()
+			employees[n].number = num
+		} else if ("change_name".equals(query[0])) {
+			val n = query[1].toInt() - 1
+			val name = query[2]
+			employees[n].name = name
		}
	}
}

PHP
クラスの作成
<?php
	class Employee {
		public int $number;
		public string $name;
	
		public function getNum(): int {
			return $this->number;
		}
	
		public function getName(): string {
			return $this->name;
		}
	}

	$employees = [];
	$N = intval(fgets(STDIN));
	while ($N--) {
		$query = explode(' ', trim(fgets(STDIN)));
		if ($query[0] === "make") {
			$employee = new Employee();
			$employee->number = intval($query[1]);
			$employee->name = $query[2];
			$employees[] = $employee;
		} else if ($query[0] === "getnum") {
			$n = intval($query[1]) - 1;
			echo $employees[$n]->getNum(), PHP_EOL;
		} else if ($query[0] === "getname") {
			$n = intval($query[1]) - 1;
			echo $employees[$n]->getName(), PHP_EOL;
		}
	}
?>
コンストラクタ
<?php
	class Employee {
-		public int $number;
+		private int $number;
-		public string $name;
+		private string $name;
	
+		public function __construct(int $num, string $name) {
+			$this->number = $num;
+			$this->name = $name;
+		}
	
		public function getNum(): int {
			return $this->number;
		}
	
		public function getName(): string {
			return $this->name;
		}
	}

	$employees = [];
	$N = intval(fgets(STDIN));
	while ($N--) {
		$query = explode(' ', trim(fgets(STDIN)));
		if ($query[0] === "make") {
-			$employee = new Employee();
-			$employee->number = intval($query[1]);
-			$employee->name = $query[2];
-			$employees[] = $employee;
+			$num = intval($query[1]);
+			$name = $query[2];
+			$employees[] = new Employee($num, $name);
		} else if ($query[0] === "getnum") {
			$n = intval($query[1]) - 1;
			echo $employees[$n]->getNum(), PHP_EOL;
		} else if ($query[0] === "getname") {
			$n = intval($query[1]) - 1;
			echo $employees[$n]->getName(), PHP_EOL;
		}
	}
?>
クラスのメンバの更新
<?php
	class Employee {
		private int $number;
		private string $name;
	
		public function __construct(int $num, string $name) {
			$this->id = $num;
			$this->name = $name;
		}
	
		public function getNum(): int {
			return $this->number;
		}
	
		public function getName(): string {
			return $this->name;
		}
	
+		public function setNum(int $num): void {
+			$this->number = $num;
+		}
+	
+		public function setName(string $name): void {
+			$this->name = $name;
+		}
	}

	$employees = [];
	$N = intval(fgets(STDIN));
	while ($N--) {
		$query = explode(' ', trim(fgets(STDIN)));
		if ($query[0] === "make") {
			$num = intval(query[1]);
			$name = query[2];
			$employees[] = new Employee($num, $name);
		} else if ($query[0] === "getnum") {
			$n = intval(query[1]) - 1;
			echo $employees[$n]->getNum(), PHP_EOL;
		} else if ($query[0] === "getname") {
			$n = intval(query[1]) - 1;
			echo $employees[$n]->getName(), PHP_EOL;
+		} else if ($query[0] === "change_num") {
+			$n = intval($query[1]) - 1;
+			$num = intval($query[2]);
+			$employees[$n]->setNum($num);
+		} else if ($query[0] === "change_name") {
+			$n = intval($query[1]) - 1;
+			$name = $query[2];
+			$employees[$n]->setName($name);
		}
	}
?>

Perl
クラスの作成
package Employee;

sub new {
	my ($class) = @_;
	my $self = {
		number,
		name,
	};
	bless $self, $class;
	return $self;
}

sub getNum {
	my ($self) = @_;
	return $self->{number};
}

sub getName {
	my ($self) = @_;
	return $self->{name};
}

my @employees;
for (1..int(<STDIN>)) {
	my @query = split ' ', <STDIN>;
	if ($query[0] eq "make") {
		my $employee = Employee->new();
		$employee->{number} = int($query[1]);
		chomp($employee->{name} = $query[2]);
		push @employees, $employee; 
	} elsif ($query[0] eq "getnum") {
		my $n = int($query[1]) - 1;
		print $employees[$n]->getNum(), $/;
	} elsif ($query[0] eq "getname") {
		my $n = int($query[1]) - 1;
		print $employees[$n]->getName(), $/;
	}
}
コンストラクタ
package Employee;

sub new {
-	my ($class) = @_;
-	my $self = {
-		number,
-		name,
-	};
+	my ($class, $num, $name) = @_;
+	my $self = {
+		number => $num,
+		name => $name,
+	};
	bless $self, $class;
	return $self;
}

sub getNum {
	my ($self) = @_;
	return $self->{number};
}

sub getName {
	my ($self) = @_;
	return $self->{name};
}

my @employees;
for (1..int(<STDIN>)) {
	my @query = split ' ', <STDIN>;
	if ($query[0] eq "make") {
-		my $employee = Employee->new();
-		$employee->{number} = int($query[1]);
-		chomp($employee->{name} = $query[2]);
-		push @employees, $employee; 
+		my $num = int($query[1]);
+		chomp(my $name = $query[2]);
+		push @employees, Employee->new($num, $name); 
	} elsif ($query[0] eq "getnum") {
		my $n = int($query[1]) - 1;
		print $employees[$n]->getNum(), $/;
	} elsif ($query[0] eq "getname") {
		my $n = int($query[1]) - 1;
		print $employees[$n]->getName(), $/;
	}
}
クラスのメンバの更新
package Employee;

sub new {
	my ($class, $num, $name) = @_;
	my $self = {
		number => $num,
		name => $name,
	};
	bless $self, $class;
	return $self;
}

sub getNum {
	my ($self) = @_;
	return $self->{number};
}

sub getName {
	my ($self) = @_;
	return $self->{name};
}

+sub setNum {
+	my ($self, $num) = @_;
+	$self->{number} = $num;
+}
+
+sub setName {
+	my ($self, $name) = @_;
+	$self->{name} = $name;
+}

my @employees;
for (1..int(<STDIN>)) {
	my @query = split ' ', <STDIN>;
	if ($query[0] eq "make") {
		my $num = int($query[1]);
		chomp(my $name = $query[2]);
		push @employees, Employee->new($num, $name); 
	} elsif ($query[0] eq "getnum") {
		my $n = int($query[1]) - 1;
		print $employees[$n]->getNum(), $/;
	} elsif ($query[0] eq "getname") {
		my $n = int($query[1]) - 1;
		print $employees[$n]->getName(), $/;
+	} elsif ($query[0] eq "change_num") {
+		my $n = int($query[1]) - 1;
+		my $num = $query[2];
+		$employees[$n]->setNum($num), $/;
+	} elsif ($query[0] eq "change_name") {
+		my $n = int($query[1]) - 1;
+		chomp(my $name = $query[2]);
+		$employees[$n]->setName($name), $/;
	}
}

Python3
クラスの作成
class Employee:
	def get_number(self) -> int:
		return self.number

	def get_name(self) -> str:
		return self.name


employees = []
for _ in range(int(input())):
	query = input().split()
	if query[0] == "make":
		employee = Employee()
		employee.number = int(query[1])
		employee.name = query[2]
		employees.append(employee)
	elif query[0] == "getnum":
		n = int(query[1]) - 1
		print(employees[n].get_number())
	elif query[0] == "getname":
		n = int(query[1]) - 1
		print(employees[n].get_name())
コンストラクタ
class Employee:
+	def __init__(self, num: int, name: str):
+		self._number = num
+		self._name = name

-	def get_number(self) -> int:
-		return self.number
+	@property
+	def number(self) -> int:
+		return self._number

-	def get_name(self) -> str:
-		return self.name
+	@property
+	def name(self) -> str:
+		return self._name


employees = []
for _ in range(int(input())):
	query = input().split()
	if query[0] == "make":
-		employee = Employee()
-		employee.number = int(query[1])
-		employee.name = query[2]
-		employees.append(employee)
+		num, name = int(query[1]), query[2]
+		employees.append(Employee(num, name))
	elif query[0] == "getnum":
		n = int(query[1]) - 1
-		print(employees[n].get_number())
+		print(employees[n].number)
	elif query[0] == "getname":
		n = int(query[1]) - 1
-		print(employees[n].get_name())
+		print(employees[n].name)
クラスのメンバの更新
class Employee:
	def __init__(self, num: int, name: str):
		self._number = num
		self._name = name

	@property
	def number(self) -> int:
		return self._number

+	@number.setter
+	def number(self, value: int):
+		self._number = value

	@property
	def name(self) -> str:
		return self._name

+	@name.setter
+	def name(self, value: str):
+		self._name = value


employees = []
for _ in range(int(input())):
	query = input().split()
	if query[0] == "make":
		num, name = int(query[1]), query[2]
		employees.append(Employee(num, name))
	elif query[0] == "getnum":
		n = int(query[1]) - 1
		print(employees[n].number)
	elif query[0] == "getname":
		n = int(query[1]) - 1
		print(employees[n].name)
+	elif query[0] == "change_num":
+		n, num = int(query[1]) - 1, int(query[2])
+		employees[n].number = num
+	elif query[0] == "change_name":
+		n, name = int(query[1]) - 1, query[2]
+		employees[n].name = name

Ruby
クラスの作成
class Employee
	attr_writer :number, :name
	
	def getNumber
		@number
	end

	def getName
		@name
	end
end

employees = []
gets.to_i.times do
	query = gets.chomp.split
	if query[0] == "make"
		employee = Employee.new
		employee.number = query[1].to_i
		employee.name = query[2]
		employees << employee
	elsif query[0] == "getnum"
		n = query[1].to_i - 1
		p employees[n].getNumber
	elsif query[0] == "getname"
		n = query[1].to_i - 1
		puts employees[n].getName
	end	
end
コンストラクタ
class Employee
-	attr_writer :number, :name
+	attr_reader :number, :name

+	def initialize(num, name)
+		@number = num
+		@name = name
+	end

-	def getNumber
-		@number
-	end

-	def getName
-		@name
-	end
end

employees = []
gets.to_i.times do
	query = gets.chomp.split
	if query[0] == "make"
-		employee = Employee.new
-		employee.number = query[1].to_i
-		employee.name = query[2]
-		employees << employee
+		num = query[1].to_i
+		name = query[2]
+		employees << Employee.new(num, name)
	elsif query[0] == "getnum"
		n = query[1].to_i - 1
-		p employees[n].getNumber
+		p employees[n].number
	elsif query[0] == "getname"
		n = query[1].to_i - 1
-		puts employees[n].getName
+		puts employees[n].name
	end	
end
クラスのメンバの更新
class Employee
-	attr_reader :number, :name
+	attr_accessor :number, :name

	def initialize(num, name)
		@nnumber = num
		@name = name
	end
end

employees = []
gets.to_i.times do
	query = gets.chomp.split
	if query[0] == "make"
		num = query[1].to_i
		name = query[2]
		employees << Employee.new(num, name)
	elsif query[0] == "getnum"
		n = query[1].to_i - 1
		p employees[n].number
	elsif query[0] == "getname"
		n = query[1].to_i - 1
		puts employees[n].name
+	elsif query[0] == "change_num"
+		n = query[1].to_i - 1
+		num = query[2].to_i
+		employees[n].number = num
+	elsif query[0] == "change_name"
+		n = query[1].to_i - 1
+		name = query[2]
+		employees[n].name = name
	end	
end

Scala
クラスの作成
import scala.io.StdIn._
import scala.collection.mutable._

class Employee() {
	var number: Int = 0
	var name: String = null

	def getNum(): Int = { number }
	def getName(): String = { name }
}

object Main extends App{
	val employees = ArrayBuffer[Employee]()
	for (_ <- 0 until readInt()) {
		val query = readLine().split(' ')
		if ("make".equals(query(0))) {
			val employee = new Employee()
			employee.number = query(1).toInt
			employee.name = query(2)
			employees += employee
		} else if ("getnum".equals(query(0))) {
			val n = query(1).toInt - 1
			println(employees(n).getNum())
		} else if ("getname".equals(query(0))) {
			val n = query(1).toInt - 1
			println(employees(n).getName())
		}
	}
}
コンストラクタ
import scala.io.StdIn._
import scala.collection.mutable._

-class Employee() {
-	var number: Int = 0
-	var name: String = null
-
-	def getNum(): Int = { number }
-	def getName(): String = { name }
-}
+case class Employee(val number: Int, val name: String)

object Main extends App{
	val employees = ArrayBuffer[Employee]()
	for (_ <- 0 until readInt()) {
		val query = readLine().split(' ')
		if ("make".equals(query(0))) {
-			val employee = new Employee()
-			employee.number = query(1).toInt
-			employee.name = query(2)
-			employees += employee
+			val num = query(1).toInt
+			val name = query(2)
+			employees += new Employee(num, name)
		} else if ("getnum".equals(query(0))) {
			val n = query(1).toInt - 1
-			println(employees(n).getNum())
+			println(employees(n).number)
		} else if ("getname".equals(query(0))) {
			val n = query(1).toInt - 1
-			println(employees(n).getName())
+			println(employees(n).name)
		}
	}
}
クラスのメンバの更新
import scala.io.StdIn._
import scala.collection.mutable._

-case class Employee(val number: Int, val name: String)
+case class Employee(var number: Int, var name: String)

object Main extends App{
	val employees = ArrayBuffer[Employee]()
	for (_ <- 0 until readInt()) {
		val query = readLine().split(' ')
		if ("make".equals(query(0))) {
			val num = query(1).toInt
			val name = query(2)
			employees += new Employee(num, name)
		} else if ("getnum".equals(query(0))) {
			val n = query(1).toInt - 1
			println(employees(n).number)
		} else if ("getname".equals(query(0))) {
			val n = query(1).toInt - 1
			println(employees(n).name)
+		} else if ("change_num".equals(query(0))) {
+			val n = query(1).toInt - 1
+			val num = query(2).toInt
+			employees(n).number = num 
+		} else if ("change_name".equals(query(0))) {
+			val n = query(1).toInt - 1
+			val name = query(2)
+			employees(n).name = name 
		}
	}
}

Swift
クラスの作成
class Employee {
	public var number: Int = 0
	public var name: String = ""

	func getNum() -> Int {
		return number
	}

	func getName() -> String {
		return name
	}
}

var employees: [Employee] = []
for _ in 0..<Int(readLine()!)! {
	let query = readLine()!.split(separator: " ")
	if query[0] == "make" {
		let employee = Employee()
		employee.number = Int(query[1])!
		employee.name = String(query[2])
		employees.append(employee)
	} else if query[0] == "getnum" {
		let n = Int(query[1])! - 1
		print(employees[n].getNum())
	} else if query[0] == "getname" {
		let n = Int(query[1])! - 1
		print(employees[n].getName())
	}
}
コンストラクタ
class Employee {
-	public var number: Int = 0
+	let number: Int
-	public var name: String = ""
+	let name: String

+	init(num: Int, name: String) {
*		self.number = num
*		self.name = name
*	}

-	func getNum() -> Int {
-		return number
-	}

-	func getName() -> String {
-		return name
-	}
}

var employees: [Employee] = []
for _ in 0..<Int(readLine()!)! {
	let query = readLine()!.split(separator: " ")
	if query[0] == "make" {
-		let employee = Employee()
-		employee.number = Int(query[1])!
-		employee.name = String(query[2])
-		employees.append(employee)
+		let num = Int(query[1])!
+		let name = String(query[2])
+		employees.append(Employee(num: num, name: name))
	} else if query[0] == "getnum" {
		let n = Int(query[1])! - 1
-		print(employees[n].getNum())
+		print(employees[n].number)
	} else if query[0] == "getname" {
		let n = Int(query[1])! - 1
-		print(employees[n].getName())
+		print(employees[n].name)
	}
}
クラスのメンバの更新
class Employee {
-	let number: Int
+	var number: Int
-	let name: String
+	var name: String

	init(num: Int, name: String) {
		self.number = num
		self.name = name
	}
}

var employees: [Employee] = []
for _ in 0..<Int(readLine()!)! {
	let query = readLine()!.split(separator: " ")
	if query[0] == "make" {
		let num = Int(query[1])!
		let name = String(query[2])
		employees.append(Employee(num: num, name: name))
	} else if query[0] == "getnum" {
		let n = Int(query[1])! - 1
		print(employees[n].number)
	} else if query[0] == "getname" {
		let n = Int(query[1])! - 1
		print(employees[n].name)
+	} else if query[0] == "change_num" {
+		let n = Int(query[1])! - 1
+		let num = Int(query[2])!
+		employees[n].number = num
+	} else if query[0] == "change_name" {
+		let n = Int(query[1])! - 1
+		let name = String(query[2])
*		employees[n].name = name
	}
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?