Questions tagged «java»

Java是一种流行的高级编程语言。如果您在使用或理解语言本身时遇到问题,请使用此标签。这个标签很少单独使用,最常与[spring],[spring-boot],[jakarta-ee],[android],[javafx],[gradle]和[maven]结合使用。

30
如何从文件内容创建Java字符串?
我已经在下面使用过一段时间了。至少在我访问过的网站上,它似乎是分布最广的。 在Java中,是否有更好/不同的方式将文件读取为字符串? private String readFile(String file) throws IOException { BufferedReader reader = new BufferedReader(new FileReader (file)); String line = null; StringBuilder stringBuilder = new StringBuilder(); String ls = System.getProperty("line.separator"); try { while((line = reader.readLine()) != null) { stringBuilder.append(line); stringBuilder.append(ls); } return stringBuilder.toString(); } finally { reader.close(); } }
1512 java  string  file  file-io  io 


27
Java的“ for each”循环如何工作?
Наэтотвопросестьответына 堆栈溢出нарусском:Какработаетцикл的foreachвJava的? 考虑: List<String> someList = new ArrayList<String>(); // add "monkey", "donkey", "skeleton key" to someList for (String item : someList) { System.out.println(item); } 如果for不为每种语法使用,等效循环将是什么样?


30
确定整数的平方根是否为整数的最快方法
我正在寻找确定一个long值是否为完美平方(即其平方根是另一个整数)的最快方法: 通过使用内置Math.sqrt() 函数,我已经完成了简单的方法,但是我想知道是否有一种方法可以通过将自己限制为仅整数域来更快地完成操作。 维护查找表是不切实际的(因为大约有2 31.5个整数,其平方小于2 63)。 这是我现在做的非常简单明了的方法: public final static boolean isPerfectSquare(long n) { if (n < 0) return false; long tst = (long)(Math.sqrt(n) + 0.5); return tst*tst == n; } 注意:我在许多Project Euler问题中都使用了此功能。因此,没有其他人将不得不维护此代码。这种微优化实际上可能会有所作为,因为挑战的一部分是在不到一分钟的时间内完成每种算法,并且在某些问题中,需要数百万次调用此函数。 我已经尝试过不同的解决方案: 经过详尽的测试后,我发现0.5没有必要将Math.sqrt()的结果添加进去,至少在我的机器上没有。 的平方根倒数快速增快,但它给了不正确的结果对于n> = 410881.然而,所建议BobbyShaftoe,我们可以使用对于n <410881的FISR黑客攻击。 牛顿的方法比慢Math.sqrt()。这可能是因为Math.sqrt()使用了类似于牛顿方法的方法,但是是在硬件中实现的,因此它比Java快得多。同样,牛顿法仍然需要使用双精度。 一种经过改进的牛顿方法,其中使用了一些技巧,以便仅涉及整数数学运算,因此需要一些技巧来避免溢出(我希望此函数与所有正的64位带符号整数一起使用),但它仍然比慢Math.sqrt()。 二进制印章甚至更慢。这是有道理的,因为二进制印章平均需要16次通过才能找到64位数字的平方根。 根据John的测试,or在C ++中,使用语句比使用a更快switch,但是在Java和C#中,or和之间似乎没有区别switch。 我还尝试制作一个查找表(作为64个布尔值的私有静态数组)。然后or,我只是说而不是switch或statement if(lookup[(int)(n&0x3F)]) { test } else …





7
为什么在带有某些Unicode字符的注释中执行Java代码?
以下代码产生输出“ Hello World!”。(不,请尝试)。 public static void main(String... args) { // The comment below is not a typo. // \u000d System.out.println("Hello World!"); } 原因是Java编译器将Unicode字符解析\u000d为新行并转换为: public static void main(String... args) { // The comment below is not a typo. // System.out.println("Hello World!"); } 因此导致评论被“执行”。 由于可以将其用于“隐藏”恶意代码或任何邪恶的程序员可以想象的内容,因此为什么允许在注释中使用它? 为什么Java规范允许这样做?
1356 java  unicode  comments 


30
如何在Java中将数字四舍五入到小数点后n位
我想要的是一种使用double-up方法将双精度型转换为四舍五入的字符串的方法-即,如果要四舍五入的小数是5,则它总是四舍五入到下一个数字。这是大多数人在大多数情况下期望的四舍五入标准方法。 我也希望只显示有效数字-即不应有任何尾随零。 我知道这样做的一种方法是使用该String.format方法: String.format("%.5g%n", 0.912385); 返回: 0.91239 这很好,但是即使数字不重要,它也始终显示5位小数: String.format("%.5g%n", 0.912300); 返回: 0.91230 另一种方法是使用DecimalFormatter: DecimalFormat df = new DecimalFormat("#.#####"); df.format(0.912385); 返回: 0.91238 但是,如您所见,这使用了半数舍入。如果前一位是偶数,它将四舍五入。我想要的是: 0.912385 -> 0.91239 0.912300 -> 0.9123 用Java实现此目标的最佳方法是什么?
1258 java  decimal  rounding  digits 

12
将项目导入Eclipse之后,“必须重写超类方法”错误
每当我必须将我的项目重新导入到Eclipse中(如果我重新安装了Eclipse或更改了项目的位置)时,几乎所有覆盖的方法都未正确格式化,从而导致错误: 该方法必须重写超类方法 值得注意的是,无论出于何种原因,这都是在Android项目中使用的,方法参数值并不总是填充的,因此我必须自己手动填充它们。例如: list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { //These arguments have their correct names public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { } }); 最初将这样填充: list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { //This methods arguments were not automatically provided public void onCreateContextMenu(ContextMenu arg1, View arg2, ContextMenuInfo arg3) { } }); 奇怪的是,如果我删除代码,并让Eclipse自动重新创建该方法,它将使用与我已经拥有的参数名称相同的名称,因此我真的不知道问题出在什么地方,否则它将为该方法自动格式化我。 必须手动手动重新创建所有我覆盖的方法,这变得非常痛苦。如果有人可以解释为什么会发生或如何解决。我会很高兴的。 也许是由于我格式化方法的方式所致,而该方式位于另一个方法的参数内?


30
Android SDK安装找不到JDK
我正在尝试在Windows 7 x64系统上安装Android SDK。 jdk-6u23-windows-x64.exe已安装,但Android SDK安装程序拒绝继续,因为它找不到JDK安装。 这是一个已知的问题?有解决方案吗?
1198 java  android  sdk  windows-7-x64  jdk6 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.