【问题标题】:Java application if/case recommendationJava应用if/case推荐
【发布时间】:2009-07-22 22:55:22
【问题描述】:

我正在为 Java 课程编写应用程序。我是一个完整的初学者,我只是从课程和网络上学到的材料。该应用程序表现出一些行为,我不确定是什么原因造成的。该应用程序基于 GUI,并根据用户输入进行计算。 对于动作侦听器部分,我有一组 If 语句,例如: “如果这个按钮这样做 如果此按钮执行此操作”

像这样排成一排。似乎应用程序正在运行所有 if 语句,而不是运行与按下的按钮相对应的语句。

对这类事情使用 case/switch 结构会更好吗?

如有必要,我可以发布我的代码,我是这个网站的新手,不确定这是否可以接受。

【问题讨论】:

  • 你在使用 else-ifs 吗?如果没有,您应该这样做。
  • 可以在 pastebin pastebin.com/m70593cb3 看到代码 如果可以在消息中发布代码,我会这样做。谢谢
  • @AlbertoPL 指出。我只是在使用: if() { } if() { } 我有一种不被接受的感觉 ;)
  • 我对该代码的一些其他提示:不要随意import *(它通常对来自特定包的import * 很有用,尤其是javax.swing,但它通常没有帮助)。很少从 Frame 扩展。如果可能的话,不要多次扩展/实现。制表符是邪恶的(四个空格)。除非必要,否则不要将局部变量变成字段。不要使用 C 风格的数组;去 Java:int[] x。对于声明(仅限),您可能会错过new type[]。当心未经检查的异常(在 Double.valueOf 中解析),因为他们表明 API 不是为用户输入而设计的。

标签: java switch-statement if-statement


【解决方案1】:

在我看到你的代码之前,我不得不猜测,但鉴于你承认的新事物,你可能正在编写这样的 if 语句

if (condition);
{
    ...
}

而不是这样

if (condition)
{
    ...
}

【讨论】:

  • 我仔细检查过,因为我意识到这可能会导致问题,因为我以前犯过这个错误,但我的陈述不以分号结尾。代码可以在这里找到pastebin.com/m70593cb3如果你想达到一个高峰
  • 快速浏览后发现第 141、169 和 198 行有这个问题
  • 啊,我怎么会错过很多次...对不起,我只是再次查看它并在那里看到它们...我的眼睛一定变得懒惰了;)谢谢你
  • 如果您使用 Java 样式并且始终使用大括号,这不是问题。
  • 当然可以。 Jesse 在 if 语句上有括号。您对从“if (expr) stmt;”之类的代码开始的更常见问题的思考然后将其更改为“if (expr) stmt; stmt2;”而不是“if (expr) { stmt; stmt2; }”
【解决方案2】:

没有看到代码我不能确定,但​​我总是使用 if 而不是 else if - 如果满足我的几个条件,那么所有相关的代码都会运行.如果您只想运行第一个匹配项,请使用if-else 确保不会执行以下语句。

【讨论】:

  • 代码可以在这里找到pastebin.com/m70593cb3下拉菜单有3个if语句,每个按钮都有自己的if语句,如果你看代码可能更有意义。感谢您迄今为止的洞察力。
【解决方案3】:

您可能不应该有一个单一的动作侦听器——为每个控件创建一个单独的动作侦听器有助于使您的代码更具可读性。

但是,如果您的控件共享大量代码(if 语句之前或之后的内容),那么这样做可能是有意义的。在这种情况下,它应该是 if/elseif。

此外,让您的侦听器成为成熟的类(而不是匿名内部类)也有助于重用代码(每个 if 语句中的内容进入每个子类)。这可能超出了您目前所了解的范围。

编辑:(更直接地回答您的实际问题)

就您的问题而言,除非 drs9222 的回答说您在 if 末尾使用分号是正确的,或者您的 if 语句正在测试错误的东西,否则不应全部执行 if。

您可能只是发布您正在测试的内容,但您需要使用 == 或 .equals 将您已知的“按钮”对象与 event.getSource() 进行比较。由于您要比较的每个 Button 对象都不同,因此只应执行一个。

【讨论】:

  • 我想既然应用程序很小,一个监听器就可以了。从那时起,它已经有所增长,我最终可能会这样做。不过,本着学习的精神,我想弄清楚为什么我的 if 语句表现得如此怪异。制作子类也出现在我的脑海中。感谢您的意见。
  • +1 表示一个动作,一个动作监听器。 -10 表示“成熟的课程”。
  • @tom 匿名内部类在代码重用方面不是很好。通过使它们成为具有成员和所有成员的完整、可重用的类,几乎没有什么东西不会得到改进。我经常将具有这种态度的人编写的大量代码重构为 1/10 大小的单个类,因为他们从不认为听众应该经常是完整的类,因此看不到重构,只是做了邪恶的复制/粘贴/编辑/重复把戏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 2014-07-06
  • 1970-01-01
相关资源
最近更新 更多