我的switch-case语句昨天运行得很好。 但是当我今天早些时候运行代码时,eclipse给了我一个错误,用红色突出显示case语句并说:case表达式必须是常量表达式,它是常量我不知道发生了什么。 这是我的代码如下:

public void onClick(View src)

{

switch(src.getId()) {

case R.id.playbtn:

checkwificonnection();

break;

case R.id.stopbtn:

Log.d(TAG,"onClick: stopping srvice");

Playbutton.setImageResource(R.drawable.playbtn1);

Playbutton.setVisibility(0); //visible

Stopbutton.setVisibility(4); //invisible

stopService(new Intent(RakistaRadio.this,myservice.class));

clearstatusbar();

timer.cancel();

Title.setText("");

Artist.setText("");

break;

case R.id.btnmenu:

openOptionsMenu();

break;

}

}

所有R.id.int都用红色加下划线。

你能提供R.id.playbtn等的定义吗? 一切都是静态的和最终的吗

可能你删除/修改了你的布局,那些id不再存在或类似的东西......

类R通常由IDE / dev工具生成,因此对于正在使用的Android版本通常是正确的。

我的R.id. *都很好,存在于android的gen类中。它也在主布局中。

在常规的Android项目中,资源R类中的常量声明如下:

public static final int main=0x7f030004;

但是,从ADT 14开始,在库项目中,它们将被声明为:

public static int main=0x7f030004;

换句话说,常量在库项目中不是最终的。

因此,您的代码将不再编译。

解决方案很简单:将switch语句转换为if-else语句。

public void onClick(View src)

{

int id = src.getId();

if (id == R.id.playbtn){

checkwificonnection();

} else if (id == R.id.stopbtn){

Log.d(TAG,"onClick: stopping srvice");

Playbutton.setImageResource(R.drawable.playbtn1);

Playbutton.setVisibility(0); //visible

Stopbutton.setVisibility(4); //invisible

stopService(new Intent(RakistaRadio.this,myservice.class));

clearstatusbar();

timer.cancel();

Title.setText("");

Artist.setText("");

} else if (id == R.id.btnmenu){

openOptionsMenu();

}

}

http://tools.android.com/tips/non-constant-fields

您可以使用以下命令快速将switch语句转换为if-else语句:

在Eclipse中

将光标移动到switch关键字并按Ctrl + 1然后选择

Convert 'switch' to 'if-else'.

在Android Studio中

将光标移动到switch关键字并按Alt + Enter然后选择

Replace 'switch' with 'if'.

我将我的switch-case语句更改为else-if语句..它只是让我想知道我创建一个新的android项目并使用switch-case语句并正常工作..

可能是您的第一个项目正在使用库项目,而您的新项目则不是。

我不明白抱歉我真的是初学者..你能解释一下吗?

你的答案正是我所需要的。我刚刚将一个应用程序项目转换为一个库项目并且遇到了一些错误,并且没有注意到最终的关键字已经从常量声明中删除了。在看完你的答案之后,马上看到我的常量btnSave的旧声明是:public static final int btnSave = 0x7f0a001f;而库的那个是:public static int btnSave = 0x7f0a001f;

至少eclipse会让你自动将开关转换为if / else。单击switch关键字。然后点击ctrl-1

棒极了!我会把它添加到我的答案中。

那么,为什么switch特别不允许呢?

编译器需要在编译时知道表达式。如果没有final关键字,则可以在运行时更改变量。

请注意,final是不够的。如果通过方法创建final变量的值,则遗憾的是它也不起作用。

特别感谢自动将开关/盒转换为if / else的快捷方式!

取消选中项目中的"Is Library"属性对我有用。

在...后清理和重建很重要

右键单击您的项目名称。然后单击属性 - > Android。在弹出窗口的右下角是一个标有"图书馆"的部分。在其下,如果选中"is Library"选项,如果您不希望项目成为库项目,请取消选中它。然后清理并重建。如果您希望它是一个库项目,那么您必须将切换更改为if else条件,如其他地方所述。

库项目标有"Is Library"的原因有多种。这不是解决问题的正确方法 - 它会破坏您的Android项目结构,使应该像常规应用程序一样的库。

解决方案可以这样做:

只需将值赋给Integer即可

将变量变为最终变量

例:

public static final int cameraRequestCode = 999;

希望这会帮助你。

"决赛"成功了。

这个问题的简单解决方案是:

单击开关然后按CTL + 1,它会将您的开关更改为if-else阻止语句,并将解决您的问题

R.id. *,因为ADT 14不再被声明为final static int所以你不能在switch case构造中使用。您可以使用if else子句代替。

是的,我已经在tools.android.com上看到了,我也尝试创建一个新项目,并使用上面的代码,它工作得很好..那是怎么回事?

tools.android.com/recent/buildchangesinrevision14请参阅"图书馆项目改造"部分

为什么他们做出这种改变是没有意义的。

这个其他解决方案如何保持漂亮的开关而不是if-else:

private enum LayoutElement {

NONE(-1),

PLAY_BUTTON(R.id.playbtn),

STOP_BUTTON(R.id.stopbtn),

MENU_BUTTON(R.id.btnmenu);

private static class _ {

static SparseArray elements = new SparseArray();

}

LayoutElement(int id) {

_.elements.put(id, this);

}

public static LayoutElement from(View view) {

return _.elements.get(view.getId(), NONE);

}

}

所以在你的代码中你可以这样做:

public void onClick(View src) {

switch(LayoutElement.from(src)) {

case PLAY_BUTTTON:

checkwificonnection();

break;

case STOP_BUTTON:

Log.d(TAG,"onClick: stopping srvice");

Playbutton.setImageResource(R.drawable.playbtn1);

Playbutton.setVisibility(0); //visible

Stopbutton.setVisibility(4); //invisible

stopService(new Intent(RakistaRadio.this,myservice.class));

clearstatusbar();

timer.cancel();

Title.setText("");

Artist.setText("");

break;

case MENU_BUTTON:

openOptionsMenu();

break;

}

}

枚举是静态的,因此影响非常有限。唯一需要关注的窗口是双重查找(首先在内部SparseArray上,后来在switch表上)

也就是说,这个枚举也可以用来以流畅的方式获取项目,如果需要的话,通过保持对id的引用......但这是其他时间的故事。

由于内存臃肿,Android不鼓励枚举;这也是他们从未在AOSP中使用过的主要原因 - 也就是你到处看到它们的原因。

stackoverflow.com/questions/5143256/

当我在我的类中声明变量的函数中使用switch时,它会抛出这个错误:

private void ShowCalendar(final Activity context, Point p, int type)

{

switch (type) {

case type_cat:

break;

case type_region:

break;

case type_city:

break;

default:

//sth

break;

}

}

当我向类的开头的变量声明final时,问题就解决了:

final int type_cat=1, type_region=2, type_city=3;

在这种情况下,enum是int的更好替代品。该方法的调用者将无法使用无效类型调用该函数。

我有特定的int类型,所以如果我使用整数它是好的。但是,我想知道enum的一个例子:D

i have specific int types so its ok if i use ints没有意义。关于枚举示例:docs.oracle.com/javase/tutorial/java/javaOO/enum.html

我的意思是函数中传入的int变量类型将始终是这三种类型之一,因此它不会破坏任何东西,这要归功于枚举示例:)

i mean that the incoming int variable type in the function will always be one of these 3 types so it won't break anything这是你的假设。其他人可以使用任意数字错误地调用该函数。使用enum,您无需假设,它由语言强制执行。

嗯好你的论证是真的,如果其他人不知道如何调用该函数或传递错误的int输入但有人可以放入默认分支返回false如果他将函数的返回也更改为布尔值。无论如何,我认为它是一种更好的方法来调用用户预设的枚举变量的函数。

我想提一下,当我尝试在我的项目中添加一个库时,我遇到了同样的情况。突然间所有switch语句都开始显示错误!

现在我试图删除我添加的库,即使它不起作用。

然而,"当我清理项目时"所有错误都消失了!

java case 的错误_关于java:switch case语句错误:case表达式必须是常量表达式相关推荐

  1. java switch 表达式_switch case语句错误:case表达式必须是常量表达式

    问题 我的switch-case语句昨天完美无缺.但是当我今天早些时候运行代码时,eclipse给了我一个错误,用红色突出显示case语句并说:case表达式必须是常量表达式,它是常量我不知道发生了什 ...

  2. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  3. java强制编译通过_强制java使用用户输入作为消息进行编译错误

    我不知道在Java中是否可行: 我想从用户(从System.in)获得输入,然后使用该输入引发编译错误. 我的意思是,如果用户输入了文本" HELLO",则程序应引发编译错误:编译 ...

  4. java 圈复杂度_关于Java:降低Switch语句的循环复杂度-Sonar

    我想减少开关盒的圈复杂度 我的代码是: public String getCalenderName() { switch (type) { case COUNTRY: return country = ...

  5. java开发错误_每个Java开发人员都必须避免的9个安全错误

    java开发错误 Checkmarx CxSAST是功能强大的源代码分析(SCA)解决方案,旨在从根本上识别,跟踪和修复技术和逻辑安全漏洞:源代码. 在这里查看 ! 自从1995年中期引入Java以来 ...

  6. java jdk 未知错误_解决JAVA JDK安装出错的最常见问题,帮你排除困扰

    一般来说,安装JAVA JDK的整个流程是很简单的,只要按照提示进行操作即可,就不会出现问题.但是呢,有小伙伴反映说,之前安装了JAVA JDK,进行卸载重装的时候出现错误提示,"正在进行另 ...

  7. java内存不足错误_调试Java内存不足错误

    我仍然是一个相对较新的程序员,我在 Java中遇到的一个问题是Out of Memory Errors.我不想使用-Xmx来增加内存,因为我觉得错误是由于编程不好造成的,我想改进编码而不是依靠更多的内 ...

  8. java的基本结构_【Java基础】基本程序设计结构

    摘自<Java核心技术 卷一> 希望能有自己的理解融入书中,融会贯通. 1.数据类型 1.1.JAVA中的基本类型 1.1.1.基本类型及其占用字节.默认值 注释:8bit = 1byte ...

  9. 学java的正确方法_学习Java编程 这10个技巧不容错过--中享思途

    这是一个国外大神20多年的经验总结出来的-- "任何可能出错的事情,最后都会出错." 这就是人们为什么喜欢进行"防错性程序设计"的原因.偏执的习惯有时很有意义, ...

最新文章

  1. 终于看见光的速度了:每秒一万亿帧的相机,拍摄到光的运行状态!
  2. svn 迁移到 git 仓库并保留 commit 历史记录
  3. Binary Tree Preorder Traversal LeetCode OJ
  4. 斯坦福大学深度学习与自然语言处理第二讲:词向量
  5. Oracle Enterprise Manager Cloud Control最新文档合集
  6. Android 绿豆通讯录【 SQLite数据库(增删改查、展示数据) + ListView数据展示控件(展示所有数据) 】
  7. 大公司体制内创新的困境
  8. ArcGIS API for JavaScript心得体验
  9. 【数论思维题】Enlarge GCD【Codeforces Round #511 (Div. 2)】
  10. 添加内核驱动模块(2)(mydriver.c+ Konfig+Makefile )
  11. android壁纸背景,android – 选择动态壁纸的背景
  12. 【活动】为中秋献上祝福
  13. Centos6.8系统镜像下载
  14. 一只青蛙跳向三个台阶_题目描述: k一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。...
  15. 微信小程序关于页面不跳转的问题
  16. 如何添加RichFaces 3.3.x到Maven项目
  17. windows一键睡眠,不是休眠!
  18. 在安卓手机上实现莫尔斯编码器
  19. GBase 8s SQL 指南:教程———3编写SELECT语句
  20. C语言设计模式(开头)

热门文章

  1. 【urllib的使用(上)】
  2. 力扣——883. 三维形体投影面积(Java、JavaScript、C实现)
  3. k8s开启IPVS模式
  4. 搜索引擎优化 SEO攻略大全
  5. python语法技巧
  6. python爬虫之爬取《贵州农经网》信息
  7. 在MFC中更改View类的基类CView为CScrollView的关键步骤
  8. dlib.get_frontal_face_detector()函数
  9. 七个经典推理(据说没有人能全部答对)
  10. 用 Appium 自动收取蚂蚁森林能量