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

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

ただいまの
回答率

89.23%

人の管理システムの変更のやり方について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 409

wafflek

score 15

名前(name)、性別(sex)、年齢(age)の値一覧を持っているリストhumanlistを作成します。

Register:R
Exit:E

と表示してRかEを入力します。
Rが入力されたら名前(name)、性別(sex)、年齢(age)を入力してhumanlistのname、sex、ageにそれぞれ代入します。登録を何回か繰り返した後

Register:R
Change:C
Exit:E

との表示にCを入力したとき、

name?:
age:

と表示するので名前と年齢を入力します。このとき入力された名前がhumanlistのある名前に一致したところの年齢を変えるというプログラムを作成したいのですが、リスト構造の仕組みがよく理解できておらず、strがCのところの処理がわからずに変なコードになってしまいうまく動かすことができませんでした。どのようにすればよいでしょうか?

import java.util.ArrayList;
import java.util.Scanner;

class hu{
    public static void main(String[] args){
    Scanner scan = new Scanner(System.in);

    ArrayList humanlist = new ArrayList<>();

    System.out.println("Register:R");
    System.out.println("Exit:E");

    String str = scan.next();


    while(!(str.equals("E"))){
    if(str.equals("R")){
    System.out.println("name?");
    String name = scan.next();

    System.out.println("sex?");
    String sex= scan.next();

    System.out.println("age?");
    int age = scan.nextInt();

    humanlist.add(
    new human(name,sex,age)
    );
    System.out.println("Register:R");
    System.out.println("Chabge:C");
    System.out.println("Exit:E");

    str = scan.next();
    }

    if(str.equals("C")){
        System.out.print("name?:");
        String name = scan.next();
        System.out.print("age:");
        int age = scan.nextInt();

        for(int i=0;i<humanlist.size();i++){
            if(humanlist.get(i).name.equals(name)){
                humanlist.get(i).set(age,age);
            }
    }
    }
}
}
}

class human{
    final String name;
    final String sex;
    int age=0;

    human(String name,String sex,int age){
    this.name=name;
    this.sex=sex;
    this.age=age;

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • asahina1979

    2019/06/10 21:45

    コンパイルエラーとなるコードをまず直しましょう

    キャンセル

  • wafflek

    2019/06/11 09:15

    すいません。コンパイルエラーとなるのはわかるのですがどのように直したらよいかわからずに手が止まってしまったもので直そうとしたのですができませんでした。

    キャンセル

回答 1

checkベストアンサー

0

ArrayListについては以下のように宣言します。

arraylistの書き方
ArrayList<型> リスト名 = new ArrayList<型>();

(引用先: https://techacademy.jp/magazine/18607)

ただ、こちらの書き方の方が良いようで、詳しくは引用先でご確認ください。

ArrayList<String> values = new ArrayList<String>();
これは書いては行けないコードで,正しくは
List<String> values = new ArrayList<String>();
と書くべき

(引用先: https://qiita.com/Mura-Mi/items/e52c28ab7cb5db140d53)

以上のことから
今回Listで管理しようとしているクラスはHumanクラスかと思います(Javaではクラス名の先頭文字を大文字にするように言われるので、humanからHumanにしました)ので、型はHumanで、

List<Human> humanList = new ArrayList<Human>();


と書けるかと思います。
また、java7以降であれば右のジェネリクス内の型は省略可能なので、

List<Human> humanList = new ArrayList<>();


と書けます。

質問者さんのコードを尊重したもの

import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<Human> humanList = new ArrayList<>();

        System.out.println("Register:R");
        System.out.println("Exit:E");

        String str = sc.next();

        while(!(str.equals("E"))) {
            if(str.equals("R")){
                System.out.println("name?");
                String name = sc.next();
                System.out.println("sex?");
                String sex = sc.next();
                System.out.println("age?");
                int age = sc.nextInt();
                humanList.add(new Human(name, sex, age));
                System.out.println("Register:R");
                System.out.println("Change:C");
                System.out.println("Exit:E");
            } else if(str.equals("C")) {
                System.out.print("name?:");
                String name = sc.next();
                System.out.print("age:");
                int age = sc.nextInt();
                for(int i = 0; i < humanList.size(); i++) {
                    if(humanList.get(i).name.equals(name)) {
                        humanList.get(i).age = age;
                    }
                }
            }
            str = sc.next();
        }

    }

}

class Human {

    final String name;
    final String sex;
    int age = 0;

    Human(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

}

自分なりに作ったもの(これが良いというわけでもないですが)

import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<Human> humanList = new ArrayList<>();

        System.out.println("Register:R");
        System.out.println("Exit:E");

        String str = sc.next();
        String name, sex;
        int age;

        while(!(str.equals("E"))) {
            if(str.equals("R")){
                System.out.println("name?");
                name = sc.next();
                System.out.println("sex?");
                sex = sc.next();
                System.out.println("age?");
                age = sc.nextInt();
                humanList.add(new Human(name, sex, age));
                System.out.println("Register:R");
                System.out.println("Change:C");
                System.out.println("Exit:E");
            } else if(str.equals("C")) {
                System.out.print("name?:");
                name = sc.next();
                System.out.print("age:");
                age = sc.nextInt();
                for(int i = 0; i < humanList.size(); i++) {
                    if(humanList.get(i).isEqualsName(name)) {
                        humanList.get(i).setAge(age);
                    }
                }
            }
            str = sc.next();
        }

    }

}

class Human {

    private final String name;
    private final String sex;
    private int age = 0;

    Human(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public void setAge(int oldAge) {
        age = oldAge;
    }

    public int getAge() {
        return age;
    }

    public boolean isEqualsName(String comparisonName) {
        return name.equals(comparisonName);
    }

}

あと、<code>タグで囲むのは良いのですが、上のようにインデントすることも大切です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/11 11:24

    ご回答ありがとうございます。
    細かい書き方まで教えてくださりとても勉強になりました。
    また問題も解決できました。
    本当にありがとうございます。

    キャンセル

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

  • ただいまの回答率 89.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る