所以我的Eclipse工作正常,它编译了我需要的一切。现在我只是编写代码,但它没有运行它,它只是没有做任何事情。我已经用其他代码测试了Eclipse,它运行正常,所以我的代码有问题,但我不确定是什么。
我正在努力完成Project Euler的第四次挑战:
回文数字两种方式相同。由两个2位数字的乘积制成的最大回文是9009 = 91×99。
找出由两个3位数字的乘积制成的最大回文。
这是我的代码:
package me.practice;
public class Main{
public static void main(String[] args)
{
int palindrome = 0;
for(int i = 0; i < 900; i++)
{
int num = (100 + i) * 999;
String numString = Integer.toString(num);
String numString_reverse = new StringBuilder(numString).reverse().toString();
if(numString == numString_reverse)
{
palindrome = Integer.parseInt(numString);
System.out.println(palindrome);
break;
}
}
}
}
编辑:我也尝试在Netbeans上运行它并且它不起作用,所以Eclipse很好。
答案 0 :(得分:0)
替换
if(numString == numString_reverse)
与
if(numString.equals(numString_reverse))
第一个if语句是比较字符串引用(并且它们每次都是假的),而不是它们的内容 - 这就是上面第二个if语句所做的。
答案 1 :(得分:0)
您的代码存在问题: 从不执行if块,因为通过乘以两个3位数得到的最大回文是906609,这是在993乘以913时获得的
上面给出的解决方案是错误的,我很抱歉:
package stackoverflow;
public class Palindrome {
public static void main(String[] args)
{
int palindrome = 0;
for(int i = 101; i < 999; i++) {
for(int j=101; j<999; j++) {
System.out.println("inside for loop");
int num = i * 999;
String numString = Integer.toString(num);
String numString_reverse = new StringBuilder(numString).reverse().toString();
if(numString.equals(numString_reverse)) {
System.out.println("inside if block");
palindrome = Integer.parseInt(numString);
System.out.println(palindrome);
break;
}
}
}
}
}
以下是真正的解决方案:
package stackoverflow;
public class Palindrome2 {
public static void main(String[] args) {
int palindrome;
for(int i=900; i<999; i++) {
for(int j=901; j<999; j++) {
int value=i*j;
String result=Integer.toString(value);
String revResult=new StringBuffer(result).reverse().toString();
if(result.equals(revResult)) {
System.out.println(i);
System.out.println(j);
palindrome=Integer.parseInt(result);
System.out.println(palindrome);
}
}
}
}
}