我今天一直在搞乱递归.通常编程技术不够用.
我开始以递归方式反转一个字符串.这是我想出的:
//A method to reverse a string using recursion
public String reverseString(String s){
char c = s.charAt(s.length()-1);
if(s.length() == 1) return Character.toString(c);
return c + reverseString(s.substring(0,s.length()-1));
}
Run Code Online (Sandbox Code Playgroud)
我的问题:Java有更好的方法吗?
对于建议抛出异常的人:
抛出异常不会给我一个编译时错误,它会给我一个运行时错误.我知道我可以抛出一个异常,我宁愿在编译期间死也不会在运行时死掉.
首先,我使用的是eclipse 3.4.
我有一个数据模型,其模式属性是枚举.
enum Mode {on(...), off(...), standby(...); ...}
Run Code Online (Sandbox Code Playgroud)
我目前正在写这个模型的视图,我有代码
...
switch(model.getMode()) {
case on:
return getOnColor();
case off:
return getOffColor();
case standby:
return getStandbyColor();
}
...
Run Code Online (Sandbox Code Playgroud)
我收到错误"此方法必须返回类型java.awt.Color的结果",因为我没有默认情况,并且在函数末尾没有返回xxx. 我想在有人为枚举添加另一种类型的情况下出现编译错误(例如关闭)所以我不想放置抛出AssertionError的默认情况,因为这将使用修改后的模式进行编译而不会被视为错误直到运行时.
我的问题是:
为什么EclipseBuilder(和javac)没有意识到这个开关涵盖了所有可能性(或者它是否涵盖了它们?)并且停止警告我需要返回类型.有没有办法,我可以做我想要的,而无需向Mode添加方法?
如果失败了,是否有一个选项可以在不包含所有Enum可能值的switch语句上发出警告/错误?
编辑:Rob:这是一个编译错误.我只是尝试用javac编译它,我得到一个"缺少返回语句"错误,目标是方法的最后一个}.Eclispe只是将错误放在方法的顶部.
我经常使用Putty(http://www.chiark.greenend.org.uk/~sgtatham/putty/)连接到Ubuntu盒子(现在9.04).它运行良好,但我无法弄清楚Ubuntu端的Putty字体,字符编码,字符转换和终端配置的正确组合,以便终端正确显示所有内容.运行诸如"screen-profiles"或"w3m"之类的ncurses程序时,问题最为明显.框图绘制字符搞砸了.
有没有人让这种组合满意?
我真的不太熟悉这些东西,我只是想在我的电脑上本地设置一个svn服务器.另外我想设置它并将其直接集成到Visual Studio 2008中(如果可能的话)?
谢谢你的帮助!
我正在jquery对话框中添加异步表单提交.我正在使用.ajax().一切都正常,但提交时间比我想要的要长.我是jquery的新手,我不确定如何调试/优化它.如何确定滞后是在前端还是后端?
谢谢,
娜塔莎
我正试图改变我的PYTHONPATH.我试图在"我的电脑"等中更改它,但它并不存在.我在一些地方在注册表中搜索,甚至整个搜索"PYTHONPATH"这个词,但无济于事.
但是,Python我很容易看到它的存在.那它在哪里?
我有一个使用Java 1.4编译的第三方JAR文件.有没有一个工具可以使jar文件与Java 1.6兼容?(像'逆转译器'的东西,但它的反面是什么).
我尝试反编译类文件并在1.6中重新编译,但它失败了.
这是问题:
我的项目使用'rsadapter.jar'为5.1,我在Eclipse 2.0 + JDK 1.4中进行了项目设置,它曾经工作正常.现在,我已经迁移到Java 1.6和Eclipse Ganymede(根据要求)和同一个项目(完全相同的设置)开始抱怨'rsadapter.jar'中缺少的类文件.我也明确地将JAR放在classpath中,但它仍然无法加载类.然后我将Java Compiler版本更改为1.4并开始工作.
问候,
- Ashish
如何确定当前进程中运行的JVM的Java堆内存地址?也就是说,使用Java,C或其他调用获取一个void*指针或等效于JVM为堆分配的内存的连续区域?
Matlab在其进程中嵌入了JVM.JVM分配的内存对于Matlab数组是不可用的,而且这一点很重要,因为它占用了大量连续的内存并且从不收缩,而Matlab也需要连续的内存用于其数组.如果在扩展期间重新分配堆,则可能导致碎片.
我想检查我的进程来检查Java堆和Matlab的内存视图之间的交互,并找出它由于调整大小而移动的时间,最好是在进程内.这需要堆的地址.从java.lang.Runtime很容易找到堆大小,但在内存中找不到它的地址.如何才能做到这一点?
我在Windows XP和Server 2003上的Matlab R2008b进程中运行Sun的JRE 1.6.0_04.我意识到这可能需要特定于供应商的技术.该过程运行我们编写的代码,因此我们可以使用自定义Java,Matlab,JNI和C/C++代码.JVM中的Java方法调用或支持的钩子优先于低级别的hackery.
编辑:这个目的是检查JVM的GC和Matlab的GC之间的相互作用.我没有必要查看Java堆,也不会从该内存中读取任何内容; 我只想看看它在整个虚拟内存空间的上下文中,Matlab的GC也试图将数据放入其中.
以下声明之间有什么区别:
int* arr1[8];
int (*arr2)[8];
int *(arr3[8]);
Run Code Online (Sandbox Code Playgroud)
理解更复杂的声明的一般规则是什么?
我想用PHP和MySQL创建一个简单的新闻系统,现在我有一个工作的帖子和阅读系统,但只有一个问题,我希望它显示10个最新消息,但它显示了10个最古老的新闻.
我的问题是:有没有办法让MySQL从表格底部返回结果,或者我必须首先获得帖子的数量,然后将其限制为最后10个帖子?
这是插入(标题和文本是转义的,时间是时间(),海报还没有完成):
mysql_query("INSERT INTO news (title, poster, text, time) VALUES ('$newstitle', '1', '$newstext', '$time')") or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)
并重新审视它(addnews回声):
$myqr = mysql_query('SELECT * FROM news LIMIT 10') or die("Error running news query: ". mysql_error());
while($myres = mysql_fetch_array($myqr))
{
addnews($myres['id'], $myres['title'], "admin", date('l jS F Y - H:i:s', $myres['time']), $myres['text']);
}
Run Code Online (Sandbox Code Playgroud)
所以,简短:我想向后读数据库,是否可能?