Java:(练习)二、基于Map和面向对象方法的世界杯冠军信息系统

Java:(练习)二、基于Map和面向对象方法的世界杯冠军信息系统

前言

学习java过程中,练习了一个面向对象小程序
程序要求(来源:非凡教育):
利用Map,完成下面的功能:
从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该年没有举办世界杯,则输出:没有举办世界杯。
届数 举办年份 冠军
第一届 1930年 乌拉圭
第二届 1934年 意大利
第三届 1938年 意大利
第四届 1950年 乌拉圭
第五届 1954年 西德
第六届 1958年 巴西
第七届 1962年 巴西
第八届 1966年 英格兰
第九届 1970年 巴西
第十届 1974年 西德
第十一届 1978年 阿根廷
第十二届 1982年 意大利
第十三届 1986年 阿根廷
第十四届 1990年 西德
第十五届 1994年 巴西
第十六届 1998年 法国
第十七届 2002年 巴西
第十八届 2006年 意大利
第十九届 2010年 西班牙
第二十届 2014年 德国
第二十一届 2018年 法国

一、世界杯类WorldCup.java

package org.renola.homework.day13.WorldCup;

public class WorldCup {

    private int year;
    private String countryName;

    public WorldCup() {
    }

    public WorldCup(int year, String countryName) {
        this.year = year;
        this.countryName = countryName;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public String getCountryName() {
        return countryName;
    }

    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }

    @Override
    public String toString() {
        return "在 "+ year + " 年举办,获胜国家为:"+ countryName;
    }
}

二、主类Main.java

package org.renola.homework.day13.WorldCup;

import java.util.HashMap;
import java.util.Scanner;

public class Main{

    public static final int[] YEAR = {1930,1934,1938,1950,1954,1958,1962,1966,1970,1974,1978,1982,1986,1990,1994,1998,2002,2006,2010,2014,2018};
    public static final String[] COUNTRY = {"乌拉圭","意大利","意大利","乌拉圭","西德","巴西","巴西","英格兰","巴西","西德","阿根廷","意大利","阿根廷","西德","巴西","法国","巴西","意大利","西班牙","德国","法国"};

    public static void main(String[] args) {

        HashMap<Integer,WorldCup> worldCupTable = new HashMap<>();
        Scanner sc = new Scanner(System.in);

        for (int i = 0; i < 21; i++) {
            worldCupTable.put(i+1, new WorldCup(YEAR[i],COUNTRY[i]));
        }

        while (true) {
            System.out.println("操作如下:0、退出   1、查询年份   2、查询届数   3、查询国家   4、查看全部信息");
            int command = sc.nextInt();
            switch (command){
                case 0:     //退出
                    System.out.println("系统已退出!");
                    return;
                case 1:     //查询年份
                    getByYear(worldCupTable, sc);
                    break;
                case 2:     //查询届数
                    getByOrder(worldCupTable, sc);
                    break;
                case 3:     //查询国家
                    getByCountry(worldCupTable, sc);
                    break;
                case 4:
                    getAll(worldCupTable);
                    break;
                default:
                    System.out.println("没有该操作!");
            }
        }

    }

    /**
     * 根据年份查询
     * @param worldCupTable
     * @param sc
     */
    private static void getByYear(HashMap<Integer, WorldCup> worldCupTable, Scanner sc) {
        System.out.println("请输入希望查询的年份:");
        int year = sc.nextInt();
        for (HashMap.Entry<Integer,WorldCup> entry : worldCupTable.entrySet()) {
            if(year == entry.getValue().getYear()) {
                System.out.println("第 "+ entry.getKey() + " 届世界杯:" + entry.getValue().toString());
                return;
            }
        }
        System.out.println(year + " 年没有世界杯!");
        return;
    }

    /**
     * 根据届数查询
     * @param worldCupTable
     * @param sc
     */
    private static void getByOrder(HashMap<Integer, WorldCup> worldCupTable, Scanner sc) {
        System.out.println("请输入希望查询的届数(现举办了21届):");
        int order = sc.nextInt();
        for (HashMap.Entry<Integer,WorldCup> entry : worldCupTable.entrySet()) {
            if(order == entry.getKey()) {
                System.out.println("第 "+ entry.getKey() + " 届世界杯:" + entry.getValue().toString());
                return;
            }
        }
        System.out.println("没有第 " + order + " 届世界杯!");
        return;
    }

    /**
     * 根据国家查询
     * @param worldCupTable
     * @param sc
     */
    private static void getByCountry(HashMap<Integer, WorldCup> worldCupTable, Scanner sc) {
        String[] country = {"乌拉圭","意大利","西德","巴西","英格兰","阿根廷","法国","西班牙","德国"};
        System.out.print("取得世界杯的国家有:");
        for (String countryName : country) {
            System.out.print("   " + countryName);
        }
        System.out.println();

        System.out.println("请输入希望查询的国家:");
        String countryName = sc.next();
        if(inArray(countryName,country)) {
            System.out.println(countryName + " 取得世界杯的有:");
            for (HashMap.Entry<Integer,WorldCup> entry : worldCupTable.entrySet()) {
                if(countryName.equals(entry.getValue().getCountryName())) {
                    System.out.println("第 "+ entry.getKey() + " 届世界杯:" + entry.getValue().getYear() + " 年!");
                }
            }
            System.out.println();
            return;
        } else {
            System.out.println(countryName + " 没有赢得世界杯!");
            return;
        }
    }

    /**
     * 查看全部信息
     * @param worldCupTable
     */
    private static void getAll(HashMap<Integer, WorldCup> worldCupTable) {
        for (HashMap.Entry<Integer,WorldCup> entry : worldCupTable.entrySet()) {
            System.out.println("第 "+ entry.getKey() + " 届世界杯:" + entry.getValue().toString());
        }
    }

    /**
     * 判断字符串是否在数组中
     * @param str
     * @param Array
     * @return
     */
    private static boolean inArray(String str, String[] Array) {
        for(int i=0; i<Array.length ;i++) {
            if(str.equals(Array[i]))
                return true;
        }
        return false;
    }

}


  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值