Java ,多个变量都只允许是 0 或 1,怎么写简单

2020-12-30 11:44:19 +08:00
nutting  nutting
if (!(open.equals("0") || open.equals("1")) && (w1.equals("0") || w1.equals("1"))
&& (w2.equals("0") || w2.equals("1")) && (w3.equals("0") || w3.equals("1"))
&& (w4.equals("0") || w4.equals("1")) && (w5.equals("0") || w5.equals("1"))
&& (w6.equals("0") || w6.equals("1")) && (w7.equals("0") || w7.equals("1"))) {
throw new Exception("设置项目参数非法!");
}

checkstyle 检测说表达式过于复杂,怎么简化,最好别用 java8 以上的什么新语法
6426 次点击
所在节点   Java  Java
52 条回复
zunceng
zunceng
2020-12-30 13:22:54 +08:00
开个脑洞 设计个注解式的 validator?

class A extern Validator {
// value_of=1,2,3;
int A;
// min=0; max=10;
int B;
// value_of="0", "1"
string C;
}

method:
bool IsValid()
string ErrorMessage()
chendy
chendy
2020-12-30 13:23:07 +08:00
说二进制的朋友们……没看到楼主的是字符串么
LGA1150
LGA1150
2020-12-30 13:26:07 +08:00
if (Stream.of(open, w1, w2).anyMatch(x -> !"0".equals(x) && !"1".equals(x))) throw ...
marcong95
marcong95
2020-12-30 13:26:37 +08:00
Pattern.matches("[01]{8}", open+w1+w2+w3+w4+w5+w6+w7)
Flywith24
Flywith24
2020-12-30 13:32:45 +08:00
hfc
hfc
2020-12-30 13:51:18 +08:00
new 个 set,初始只有字符串的 0 和 1,后续把上面这一串变量往里面塞,最后 set.size()>2 就是存在非法参数
phpfpm
phpfpm
2020-12-30 14:10:00 +08:00
你拆成多个 if-elseif 多好
这样 throw 的时候你还有在哪出问题的 context
sutra
sutra
2020-12-30 14:17:05 +08:00
Ranying
Ranying
2020-12-30 14:22:38 +08:00
遍历这些变量拼接的字符串
liyanggyang
liyanggyang
2020-12-30 14:26:24 +08:00
@yuk1no 这个可
lululau
lululau
2020-12-30 14:28:59 +08:00
Stream.of(w1, w2, ...).anyMatch(w -> w.matches("[01]"))
lululau
lululau
2020-12-30 14:29:20 +08:00
Stream.of(w1, w2, ...).anyMatch(w -> !w.matches("[01]"))
Cbdy
Cbdy
2020-12-30 14:29:30 +08:00
Stream.of(w1, w2, w3, w4, w5).allMatch(List.of("0", "1")::contains);
Lemeng
Lemeng
2020-12-30 14:34:26 +08:00
正则好写
otakustay
otakustay
2020-12-30 14:44:56 +08:00
容易玩脱的办法:把 0 和 1 拼起来变二进制再转数字,然后用位操作判断
laqow
laqow
2020-12-30 14:56:04 +08:00
如果是用户界面的话就几个控件单次运算的,这么写写可以的吧
Joker123456789
2020-12-30 15:31:54 +08:00
枚举啊,不是 0 和 1 赋值不进去, 然后判空即可。
KarmaWu
2020-12-30 16:07:39 +08:00
Stream.of(w1, w2, w3, w4, w5, w6, w7).allMatch(List.of("0", "1")::contains);
Vegetable
2020-12-30 16:57:28 +08:00
太逗了吧,字符串拼起来正则一下如何。
weidaizi
2020-12-30 17:48:43 +08:00
感觉回复挺火热的,但是出现这种丑陋的检测,难道不是之前类型的设计思路出问题了吗? 改这里多半不是好的办法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/740262

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX