- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在我的应用程序中,用户可以选择文本并使用图像上显示的选项设置样式。在查看我的代码时,我想知道我的 switch 语句的所有 case 语句是否都应break
或返回 true/false
,它是否有任何影响?我可以通过使用 Log.d();
看到 break
离开 switch 方法并使用 return
留在 switch 中
所以在这种情况下,案件中发生的事情重要吗?
使用 Switch case 的方法:
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.textcolor:
f3 = ColorPickerDialogFrag2.newInstance(3, Color.WHITE);
f3.setStyle(android.support.v4.app.DialogFragment.STYLE_NORMAL, R.style.AppTheme);
f3.show(fragmentManager, "d");
f3.setListener(this);
break;
//--------------------BOLD----------------------------
case R.id.bold:
styleSpans = str.getSpans(selectionStart, selectionEnd, StyleSpan.class);
for (int i = 0; i < styleSpans.length; i++) {
if (styleSpans[i].getStyle() == android.graphics.Typeface.BOLD) {
str.removeSpan(styleSpans[i]);
exists = true;
}
}
if (!exists) {
str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), selectionStart, selectionEnd,
Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
editText.setSelection(selectionStart, selectionEnd);
return true;
//--------------------ITALIC----------------------------
case R.id.italic:
styleSpans = str.getSpans(selectionStart, selectionEnd, StyleSpan.class);
for (int i = 0; i < styleSpans.length; i++) {
if (styleSpans[i].getStyle() == android.graphics.Typeface.ITALIC) {
str.removeSpan(styleSpans[i]);
exists = true;
}
}
if (!exists) {
str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), selectionStart, selectionEnd,
Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
editText.setSelection(selectionStart, selectionEnd);
Log.d(LOG_TAG, "italic");
break;
//--------------------UNDERLINE----------------------------
case R.id.underline:
UnderlineSpan[] underSpan = str.getSpans(selectionStart, selectionEnd, UnderlineSpan.class);
for (int i = 0; i < underSpan.length; i++) {
str.removeSpan(underSpan[i]);
exists = true;
}
if (!exists) {
str.setSpan(new UnderlineSpan(), selectionStart, selectionEnd, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
editText.setSelection(selectionStart, selectionEnd);
Log.d(LOG_TAG, "underline");
return true;
//--------------------STROKE----------------------------
case R.id.stroke:
Log.d(LOG_TAG, "stroke");
android.text.style.StrikethroughSpan[] strokeSpan = str.getSpans(selectionStart, selectionEnd, android.text.style.StrikethroughSpan.class);
for (int i = 0; i < strokeSpan.length; i++) {
str.removeSpan(strokeSpan[i]);
exists = true;
}
if (!exists) {
str.setSpan(new android.text.style.StrikethroughSpan(), selectionStart, selectionEnd, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
editText.setSelection(selectionStart, selectionEnd);
return false;
case R.id.increase:
Log.d(LOG_TAG, "increase");
str.setSpan(new RelativeSizeSpan(1.1f), selectionStart, selectionEnd, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
editText.setSelection(selectionStart, selectionEnd);
break;
case R.id.decrease:
str.setSpan(new RelativeSizeSpan(0.9f), selectionStart, selectionEnd, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
editText.setSelection(selectionStart, selectionEnd);
break;
case android.R.id.cut:
CharSequence charSequence = editText.getText().subSequence(selectionStart, selectionEnd);
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("simple text", charSequence);
clipboard.setPrimaryClip(clip);
editText.getText().replace(selectionStart, selectionEnd, "");
Toast.makeText(context, R.string.toastCopy, Toast.LENGTH_SHORT).show();
break;
case android.R.id.copy:
charSequence = editText.getText().subSequence(selectionStart, selectionEnd);
clipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
clip = ClipData.newPlainText("simple text", charSequence);
clipboard.setPrimaryClip(clip);
Toast.makeText(context, R.string.toastCopy, Toast.LENGTH_SHORT).show();
break;
case R.id.textfont:
FontFragment fontFragment = new FontFragment(selectionStart, selectionEnd, editText);
fontFragment.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.CustomDialog);
fontFragment.show(fragmentManager, "fontfragment");
break;
}
}
Log.d(LOG_TAG, "out of switch");
return true;
}
最佳答案
using return stays in the switch
这是不正确的。 return
语句绝对不会留在switch
语句中。 return
将立即从方法返回。该方法中的其余代码将不会执行。这就是为什么在使用 return
时看不到 switch 语句之后的日志语句的原因。
break
或 return
都会退出 switch 语句。两者都可以。关于在一个方法中使用多个 return
语句存在很多争论。
有些人更喜欢在方法末尾只有一个 return
语句。这种做法的好处是最不令人惊讶:当您维护软件并需要进行更改时,您可以在切换后添加语句,它们将被执行。您不需要找到每个 return
并调整每个。
然而,有时,多个 return
语句有很好的用途。例如,如果您测试错误条件并立即返回
,这可以使您的代码更短并避免不必要的深度缩进。有时它需要过多的标志和复杂的逻辑来避免额外的返回语句。
最终,请考虑在未来数月和数年内阅读和理解您的代码时的清晰度和易用性。那时候差异就很重要了。尽可能以最简单明了的方式编写代码。我建议将您的 switch 语句分开,并为每个 block 使用单独的方法。这样声明就会更短更清楚。您将能够在屏幕上看到每个案例,而无需滚动和迷失在噪音中,并且能够看到每个中断
。或者使用 if-else 语句,这样当 case
因为忘记了 break
而失败时,您不会感到惊讶。
关于java - 在这种情况下,我的 Switch 语句应该以 break 或 return x 退出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39883833/
我目前正在为 Cocoa/Objective-C 项目编写一个脚本来完全自动化我的编译-运行-调试过程。 我的最后一行代码是: lldb -f Build/MyApp.app -o "run" 这实际
我有一个带有登录屏幕的脚本,如果按下取消按钮,我想完全退出该应用程序。我尝试了 3 种方法: 系统退出() QApplication.quit() QCoreApplication.instance(
我有一个 Flash 应用程序,可以重定向到另一个页面。我很乐意捕获任何其他窗口卸载事件(单击链接/提交表单)并警告用户他们将丢失 Flash 应用程序中的进度。 但是,我找不到任何方法来判断 URL
我正在尝试在 Ubuntu 上用 Python 编写一个简单的程序,它将在播放视频完成后关闭/退出/退出 VLC Player。 能否请您指导我应该在我的程序中添加什么以获得我需要的结果。 impor
我在 Lynda.com 上学习 PHP 2 视频时遇到了一个问题,因为讲师似乎忽略了告诉我们他在视频中执行的步骤之一。我在这里上传了相关视频http://www.youtube.com/watch?
某天在群内有同学问到,在python下我用input或者raw_input都得输入完后回车才能获取到输入的值,那如何实现任意键退出暂停等功能呢,我当时也没有多想,因为接触python时间也不算长,主
我按顺序调用了几个函数(我无法编辑),但有些函数会重定向用户,所以我永远不会进入下一个函数。 我正在调用一个第三方函数,它调用了我能够阻止的 wp_redirect(),但是下一行是 exit;我不知
终止/退出主函数的 D 方式是什么? import std.stdio; import core.thread; void main() { int i; while (i <= 5)
我正在申请写作。用户可以打开应用程序、写一些文本、保存他们的工作等。 我试图做到这一点,以便点击 window close按钮将提示用户 (a) 保存他们的工作(如有必要)或 (b) 退出。 我正在尝
我正在通过在 repl 中检查别人的代码来玩弄它。 它不断调用 System/exit,这导致我的 repl 崩溃。这真是令人气愤。 在我有权访问的所有代码中,我都模拟了调用。 但它也会调用一些我没有
我正在使用 subprocess执行mimic的模块程序(指定 here )。下面的代码成功地读取了一些文本并写入了一个 mp3 文件。 import subprocess proc = subpro
退出 .then 范围后数组上的值被清除 在下面的代码中tableValues1.length 给我正确的长度,直到它位于每个循环内当它退出时,作用域数组长度为零。 请谁能帮我解决这个问题 - 谢谢
我正在尝试为 s3cmd 编写一个 docker 镜像。当我通过 docker-compose 运行从 Dockerfile 构建的图像时,容器在 docker compose run 命令之前退出。
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: Quitting an application - is that frowned upon? 我编写了一个 And
我遇到 Selenium WebDriver 仅执行一次后退出 for 循环的问题。据推测,这是获取内容和在加载页面之前启动循环的问题。是否有可能让 webdriver 等待页面加载? List al
#include #include #include #include "Player.h" using namespace std; void PlayerMenu(); int main()
class Test{ public static void main(String args[]) { Patron list[] = new PatronData(
我正在做一些作业,遇到了这个问题。 Write a program that reads several lines of text and prints a table indicating the
我正在用 C 创建一个简单的 Linux 命令 shell。我无法理解我的代码在哪里出现问题。 “commands”是我希望作为一个父进程的子进程同时执行的 Linux 命令字符串列表。当所有执行完成
我的控制台应用程序有点问题。应用程序应该从用户那里获取数字并将它们添加到列表中,但是如果输入是“c”,它应该关闭。我不知道如何在不使用 Scanner.nextLine() 挂起应用程序并退出循环的情
我是一名优秀的程序员,十分优秀!