我需要找到满足用两种不同方法设置的条件的系列中的数字。
我尝试过将添加变量primalpalindromes的语句移出main方法中的for循环,但这给了我一个比我要检查的数字序列还要大的数字。
public static void main(String[] args) {
boolean isPrime = true;
boolean isPalindrome = true;
String primepalindromes = "";
int j;
for (j = 1; j <= 100; j++) {
checkprime(isPrime, j);
if (isPrime = true) {
checkpalindrome(isPalindrome, j);
if (isPalindrome = true) {
primepalindromes = primepalindromes + j + " ";
}
}
}
System.out.println(primepalindromes);
}
private static boolean checkprime(boolean isPrime, int j) {
int temp = 0;
for (int i = 2; i <= j / 2; i++) {
temp = j % i;
if (temp == 0) {
isPrime = false;
break;
}
}
return isPrime;
}
private static boolean checkpalindrome(boolean isPalindrome, int j) {
int r, sum = 0, temp;
temp = j;
while (j > 0) {
r = j % 10;
sum = (sum * 10) + r;
j = j / 10;
}
if (temp == sum) {
isPalindrome = false;
}
return isPalindrome;
}
该代码应该返回符合两个方法标准的集合系列中的所有数字,但只给出该系列中的所有数字。
问题出在您的“ if”语句中:
if (isPrime = true) {
if (isPalindrome = true) {
单个“等于”符号是一个赋值,其值就是被赋值的值-在这种情况下,该值始终为true。
更改它们以使用双等于运算符:
if (isPrime == true) {
或者,由于这些是布尔变量,因此最好直接使用它们:
if (isPrime) {
编辑添加:另外,您没有分配调用函数的结果。在函数中,Java不会更改作为参数传入的原始类型的值,这意味着您具有:
boolean checkprime(boolean isPrime, int j)
并说:
checkprime(someIsPrimeVariable,j);
将值分配给isPrime不会更改调用者提供的变量的值(即someIsPrimeVariable不会更改)。
因此,放弃isPrime参数,而只使用返回值,所以:
isPrime = checkprime(int j);
因此您的代码将变为:
for (j = 1; j <= 100; j++) {
isPrime = checkprime(j);
if (isPrime) {
isPalindrome = checkpalindrome(j);
if (isPalindrome) {
primepalindromes = primepalindromes + j + " ";
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句