У меня есть код, который я конвертирую в Java, я новичок в программировании, но я уже проделал некоторую работу над PL, хотя я не понимаю, почему я получаю эту ошибку
Исходный код C:
#include <stdio.h>
#include <conio.h>
int main () {
int i, j, k;
for (i=1; i<=59; i++) {
k = 1;
for (j=2; j<i; j++)
if (i % (j*j) == 0) k = 0;
if (k) printf ("%d\n", i);
}
printf("%d",i);
getch();
}
Мой преобразованный код Java:
import java.util.*;
public class squarefree {
public static void main(String[] args) {
int i, j,k;
for(i=1; i<60; i++){
k=1;
for(j=2; j<i; j++){
if(i % (j*j) == 0)
k=0;
if(k) System.out.println(i);
}
System.out.println(i);
}
}
}
Может кто-нибудь объяснить? Спасибо, парни :)
2 способа исправить это:
1) Использовать if (k != 0)
, так как в java int
является int
а boolean
является его собственный тип.
2) Сказав это, почему бы не изменить k
на булевское значение? Вы используете его для логической проверки, и она изменяется только от 0 до 1, поэтому, если вы действительно используете логическое значение, это будет намного легче читать.
например:
boolean k = true;
// your code here
// your ifstatement to change k
k = false;
// print code
if (k) ...
В C
вы можете сравнить int
как boolean
а любое ненулевое значение считается TRUE. В Java это не так. Эта
if(k) System.out.println(i);
должно быть что-то вроде
if(k != 0) System.out.println(i);
В отличие от C, int
неявно преобразуется в boolean
в Java.
Вам просто нужно написать if( k != 0 )
:)
Что вы не понимаете в сообщении об ошибке? if(k)
не имеет никакого смысла в java-land. Вы хотели написать if(k != 0)
, чтобы проверить ненулевое значение?
В Java логическое значение является либо истинным, либо ложным. В C int имеет место для булевого типа с истинным значением, отличным от нуля, а false - равным нулю. Так что вы ищете:
public static void main(String[] args) {
int i, j;
boolean k;
for(i=1; i<60; i++){
k=true;
for(j=2; j<i; j++){
if(i % (j*j) == 0)
k=false;
}
if(k) System.out.println(i);
}
System.out.println(i);
}