首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >项目Euler #4: Java

项目Euler #4: Java
EN

Stack Overflow用户
提问于 2016-07-10 17:45:39
回答 2查看 105关注 0票数 1

我很难弄清楚为什么我的代码不能工作。本质上,我正在尝试编写Project Euler #4,它试图找出可以通过将两个三位数相乘而获得的最大回文数。这段代码似乎不能工作(它可以编译)。每当我执行代码时,它只打印"0“。我知道它在算法上可能不是很有效,但是我做错了什么?

代码语言:javascript
复制
public class Palindrome {
public static void main (String [] args) {

   int largestnum = 0; 
   Palindrome pp = new Palindrome();

   for (int i = 100; i <= 999; i++) {
       for (int k = 100; k <= 999; k++) {
            if (pp.checkPal(i * k) == true) {
                largestnum = i * k;
            }
        }
    }        

   System.out.println(largestnum);
}


public boolean checkPal(int y) {
    String snum = Integer.toString(y);
    int snum_length = snum.length() - 1;
    String palindrome = new String("");

    for (int i = snum_length; i >= 0; i--) {
        palindrome.concat(Character.toString(snum.charAt(i)));
    }

    if (snum.equals(palindrome)) {
        return true;
    }  
    else {
        return false;
    }      
}
}
EN

回答 2

Stack Overflow用户

发布于 2016-07-10 18:01:35

Java中的字符串是不可变的。

您正在执行以下操作:

代码语言:javascript
复制
palindrome.concat(Character.toString(snum.charAt(i)));

这是一个表达式,它返回一个由palindromeCharacter.toString(snum.charAt(i))连接而成的新字符串。它不修改palindrome

您可以像这样修复它:

代码语言:javascript
复制
palindrome = palindrome.concat(Character.toString(snum.charAt(i)));

尽管使用StringBufferStringBuilder来构建字符串会更好。

票数 3
EN

Stack Overflow用户

发布于 2016-07-10 18:01:49

您可能会得到这些空格,因为在checkPal函数中有一条print语句。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38290586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档