how2j.cn

本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



5分15秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器



步骤 1 : 预先定义的常量   
步骤 2 : 使用枚举的好处   
步骤 3 : 遍历枚举   
步骤 4 : 练习-枚举   
步骤 5 : 答案-枚举   

步骤 1 :

预先定义的常量

edit
枚举enum是一种特殊的类(还是类),使用枚举可以很方便的定义常量
比如设计一个枚举类型 季节,里面有4种常量


public enum Season {
SPRING,SUMMER,AUTUMN,WINTER
}


一个常用的场合就是switch语句中,使用枚举来进行判断

注:因为是常量,所以一般都是全大写
public class HelloWorld { public static void main(String[] args) { Season season = Season.SPRING; switch (season) { case SPRING: System.out.println("春天"); break; case SUMMER: System.out.println("夏天"); break; case AUTUMN: System.out.println("秋天"); break; case WINTER: System.out.println("冬天"); break; } } }
public enum Season { SPRING,SUMMER,AUTUMN,WINTER }
步骤 2 :

使用枚举的好处

edit
假设在使用switch的时候,不是使用枚举,而是使用int,而int的取值范围就不只是1-4,有可能取一个超出1-4之间的值,这样判断结果就似是而非了。(因为只有4个季节)

但是使用枚举,就能把范围死死的限定在这四个当中

SPRING,SUMMER,AUTUMN,WINTER

而不会出现奇怪的 第5季
public class HelloWorld { public static void main(String[] args) { int season = 5; switch (season) { case 1: System.out.println("春天"); break; case 2: System.out.println("夏天"); break; case 3: System.out.println("秋天"); break; case 4: System.out.println("冬天"); break; } } }
public class HelloWorld {
    public static void main(String[] args) {
        int season = 5;
        switch (season) {
        case 1:
            System.out.println("春天");
            break;
        case 2:
            System.out.println("夏天");
            break;
        case 3:
            System.out.println("秋天");
            break;
        case 4:
            System.out.println("冬天");
            break;
        }
    }
}
借助增强型for循环,可以很方便的遍历一个枚举都有哪些常量
public class HelloWorld { public static void main(String[] args) { for (Season s : Season.values()) { System.out.println(s); } } }
public class HelloWorld {
	public static void main(String[] args) {
		for (Season s : Season.values()) {
			System.out.println(s);
		}
	}
}
步骤 4 :

练习-枚举

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
英雄联盟中有这么一些分类
TANK (坦克)
WIZARD (法师 )
ASSASSIN (刺客)
ASSIST (辅助)
WARRIOR (近战)
RANGED (远程 )
PUSH (推进)
FARMING (打野)
设计一个枚举类型HeroType,使用上述分类作为常量

再编写一段switch语句,把每种枚举常量输出为中文字符串
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 基础总计0个答案 (总共需要0积分)
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 基础总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

2分12秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器


package charactor; public enum HeroType { TANK, WIZARD, ASSASSIN, ASSIST, WARRIOR, RANGED, PUSH, FARMING }
package charactor; public class Hero { public String name; // 姓名 public static void main(String[] args) { HeroType type = HeroType.ASSASSIN; switch (type) { case TANK: System.out.println("坦克"); break; case WIZARD: System.out.println("法师"); break; case ASSASSIN: System.out.println("刺客"); break; case ASSIST: System.out.println("辅助"); break; case WARRIOR: System.out.println("近战"); break; case RANGED: System.out.println("远程战"); break; case PUSH: System.out.println("推进"); break; case FARMING: System.out.println("打野"); break; } } }


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2023-08-18 大佬们帮我看看我要怎么改
justin-wang9




本来是想通过控制台的输入来交给switch来决定判断要输出什么值,但是出现了——> java: 无法从静态上下文中引用非静态 方法 nextInt() 的错误,我应该怎么改
import java.util.Scanner;


public class Hero {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        HeroType heroType = Scanner.nextInt();
        switch (heroType){
            case TANK:
                System.out.println("坦克");
                break;
            case WIZARD:
                System.out.println("法师");
                break;
            case ASSASSIN:
                System.out.println("刺客");
                break;
            case ASSIST:
                System.out.println("辅助");
                break;
            case WARRIOR:
                System.out.println("近战");
                break;
            case RANGED:
                System.out.println("远程");
                break;
            case PUSH:
                System.out.println("推进");
                break;
            case FARMING:
                System.out.println("打野");
                break;
        }
    }
}



public enum HeroType {
    TANK,WIZARD,ASSASSIN,ASSIST, WARRIOR,RANGED,PUSH,FARMING
}
java: 无法从静态上下文中引用非静态 方法 nextInt()

        HeroType heroType = Scanner.nextInt();

这个方法出错


3 个答案

晚安嘛
答案时间:2024-03-04
HeroType heroType = Scanner.nextInt(),你这个错是因为后面输入的是int型,而前面是枚举类,无法赋值,我想到的是把前面定义成String型,但是这样似乎和枚举类没什么关系。为了满足题目要求,最好的解法是switch外面套一个循环,遍历枚举类里面的所有常量。

码农人
答案时间:2023-11-20
这样行吗?感觉有些偷懒,-_-

优优我心
答案时间:2023-08-30
1. 你的 Scanner.nextInt()写错了,应该是小写 2. .nextInt()读出来的是整数



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2022-08-28 枚举答案
logiczqr




如题
public enum HeroType {
	TANK,WIZARD,ASSASSIN,ASSIST,WARRIOR,RANGED,PUSH,FARMING
}

public class TestHeroType {
	public static void main(String[] args) {
		for (HeroType ht : HeroType.values()) {
			switch (ht) {
			case TANK:
				System.out.println("坦克");
				break;
			case WIZARD:
				System.out.println("法师");
				break;
			case ASSASSIN:
				System.out.println("刺客");
				break;
			case ASSIST:
				System.out.println("辅助");
				break;
			case RANGED:
				System.out.println("远程");
				break;
			case PUSH:
				System.out.println("推进");
				break;
			case FARMING:
				System.out.println("打野");
				break;
			case WARRIOR:
				System.out.println("近战");
				break;
			default:
				break;
			}
		}
	}
}

							


9 个答案

2672148523
答案时间:2024-02-09
public class Hello { public static void main(String[] args) { for (HeroType h: HeroType.values()) { switch (h){ case TANK -> System.out.println("坦克"); case WIZARD -> System.out.println("法师"); case ASSASSIN -> System.out.println("刺客"); case ASSIST -> System.out.println("辅助"); case WARRIOR -> System.out.println("近战"); case RANGED -> System.out.println("远程"); case PUSH -> System.out.println("推进"); case FARMING -> System.out.println("打野"); } } } }

龚炎
答案时间:2023-05-06
把枚举放到其他类里面的话,就不能用switch了。得用if
for (Hero.英雄分类 y : Hero.英雄分类.values()) {
    if(y.name() == "TANK"){
        xxx
    }
}

胡乱起个名
答案时间:2023-03-28
111

learn杜
答案时间:2023-01-30
package Lei1; public class HeroType { public enum Herotype{ TANK,WIZARD,ASSASSIN,ASSIST,WARRIOR,RANGED,PUSH,FARMING } public static void main(String[] args) { Herotype herotype = Herotype.FARMING; switch(herotype) { case TANK: System.out.println("坦克"); break; case WIZARD: System.out.println("法师"); break; case ASSASSIN: System.out.println("刺客"); break; case ASSIST: System.out.println("辅助"); break; case WARRIOR: System.out.println("近战"); break; case RANGED: System.out.println("远程"); break; case PUSH: System.out.println("推进"); break; case FARMING: System.out.println("打野"); break; } for (Herotype h : Herotype.values()) { System.out.println(h); } } }

伊亻
答案时间:2023-01-16
Bingod
答案时间:2022-12-23
54Mozu
答案时间:2022-11-24
public enum HeroType { TANK, WIZARD, ASSASSIN, ASSIST, WARRIOR, RANGED, PUSH, FARMING }

给你买粉包
答案时间:2022-10-18
package JIchuDome; public enum HeroType { TANK,//坦克 WIZARD,//法师 ASSASSIN,//刺客 ASSIST,//辅助 WARRIOR,//近战 RANGED,//远程 PUSH,//推进 FARMING//打野 }

Capper
答案时间:2022-10-10
package Enum; public enum HeroType { //坦克 TANK, //法师 WIZARD, //刺客 ASSASSIN, //辅助 ASSIST, //近战 WARRIOR, //远程 RANGED, //推进 PUSH, //打野 FARMING }



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2022-01-14 题目答案
2021-12-22 语句含义
2021-12-05 练习题最正确答案


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 40 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 基础-类和对象-枚举类型 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图