JDK no compila palabras con acentos y una duda sobre Java

Que tal chicos?
Hay alguna manera de que hacer que el jdk cuando compile no lo haga en utf-8 y lo haga en otro formato?
Es que cada vez que compilo escupe:
PruebaNumero.java:46: warning: unmappable character for encoding UTF8                                                                                                     
          System.out.println("Introduce un n�mero para calcular su factorial");   


Y es bastante molesto no poder poner acentos y esté diciendo eso constantemente.
Añado que uso debian y uso el paquete sun-java6-jdk

Y otra duda. Me han dicho que escriba un metodo que compruebe si un numero es primo o no:
Determinar si un número es primo. Para ello se utilizará la siguiente regla:
o Un número par N no es primo, excepto el 2.
o Un número impar N es primo si no es divisible por los números impares
comprendidos entre 3 y N/2.

He escrito este método:
public boolean esPrimo(long numero){
         boolean resultado=true;
         if(numero%2==0 && numero!=2){
            System.out.println(numero+" no es primo");
            resultado=false;
            return resultado;
         }     
         else{
            int i=3;
            while(numero%i !=0 && i<numero/2){
               resultado=true;
               i++;
            }
            if(resultado==true) System.out.println(numero+" es primo");
            else System.out.println(numero+" no es primo");
            return resultado;
         }
      }


El tema está que al probarlo me dice que los múltiplos de 5 como el 15, 25, 35... Son primos!
No sé donde puede estar el error. Gracias
Sobre el código, creo que el problema es el while:

while(numero%i !=0 && i<numero/2){

Aqui no sirve un while: mientras entre en el while, te va a devolver que el numero es primo. Con el 15 no veo que ocurre, pero los otros te da que el numero (ej. 25) al dividirlo entre i te va a dar un resto distinto de 0 (25%3!=0) y que el 25/2>3, por lo que entra en el while.
Con el 15 a saber que ocurre, pero: "Un número impar N es primo si no es divisible por los números impares comprendidos entre 3 y N/2.", en lugar de i++, seria i = i+2, ya que si no estarías comprobando los pares también.

Por ello cambiaría ese while por un for, osea, para cada i entre 3 y el numero/2, con la condición de aumento +2. Luego materia un if para comprobar si el numero%i da resto cero, que es lo que piden. Y ahi ya sale solo.
Inventado escribió:Sobre el código, creo que el problema es el while:

while(numero%i !=0 && i<numero/2){

Aqui no sirve un while: mientras entre en el while, te va a devolver que el numero es primo. Con el 15 no veo que ocurre, pero los otros te da que el numero (ej. 25) al dividirlo entre i te va a dar un resto distinto de 0 (25%3!=0) y que el 25/2>3, por lo que entra en el while.
Con el 15 a saber que ocurre, pero: "Un número impar N es primo si no es divisible por los números impares comprendidos entre 3 y N/2.", en lugar de i++, seria i = i+2, ya que si no estarías comprobando los pares también.

Por ello cambiaría ese while por un for, osea, para cada i entre 3 y el numero/2, con la condición de aumento +2. Luego materia un if para comprobar si el numero%i da resto cero, que es lo que piden. Y ahi ya sale solo.


Bueno, he hecho lo que me has comentado y sigue igual:
public boolean esPrimo(long numero){
         boolean resultado=true;
         if(numero%2==0 && numero!=2){
            System.out.println(numero+" no es primo");
            resultado=false;
            return resultado;
         }     
         else{
            for(int i=3; i<numero/2; i=i+2){
         if(numero%i !=0) resultado=true;
         else resultado=false;
            }
            if(resultado==true) System.out.println(numero+" es primo");
            else System.out.println(numero+" no es primo");
            return resultado;
         }
      }


Y me dice que:
Introduce un n�mero para saber si es primo o no
25
25 es primo
public static boolean esPrimo(long numero){
        boolean resultado=true;
        if(numero%2==0 && numero!=2)
           resultado=false;
        else{
           for(int i=3; i<numero/2; i=i+2){
              if(numero%i == 0)
                 resultado=false;
           }
        }
        if(resultado)
           System.out.println("El "+numero+" es primo");
        else
           System.out.println("El "+numero+" no es primo");
        return resultado;
}

Tambien habría que indicar que si el número es 1, no es primo.

if((numero%2==0 && numero!=2) || numero==1)
Ealdor escribió:
public static boolean esPrimo(long numero){
        boolean resultado=true;
        if(numero%2==0 &amp;&amp; numero!=2)
           resultado=false;
        else{
           for(int i=3; i&lt;numero/2; i=i+2){
              if(numero%i == 0)
                 resultado=false;
           }
        }
        if(resultado)
           System.out.println("El "+numero+" es primo");
        else
           System.out.println("El "+numero+" no es primo");
        return resultado;
}

Tambien habría que indicar que si el número es 1, no es primo.

if((numero%2==0 &amp;&amp; numero!=2) || numero==1)

Tampoco lo sería el cero y se deben omitir los números negativos, pues cuando hablamos de números primos estamos hablando solamente de los números naturales.
Por lo tanto, creo que sería mejor decir que solo numero será válido si numero > 1.

Saludos.
aun con todo eso, sigue diciendo que 25 es primo xD
Donato escribió:aun con todo eso, sigue diciendo que 25 es primo xD

public static void main(String[] args){
      long i = 25;
      System.out.println(esPrimo(i));
}

El 25 no es primo
false
A ver si esto te vale... yo lo acabo de hacer y me funciona perfectamente xDD (estoy aprendiendo java eh?)

       double primo=Math.pow(2,numero-1);
       if ((primo-1)%numero==0){
           System.out.println("Es primo");
       }
       else{
           System.out.println("No es primo");
       }
   

Espero que te sirva ^^Ç

PD: la fórmulo que utilizo para saber si es primo es la siguiente: ((2^(numero-1))-1)/numero si da 0 de resto, es un número primo ^^
ya, es tema que es que me piden usando el algoritmo que me han dicho mas arriba. Lo unico que se me ocurre es que no valga porque creo que lo tengo bien implementado gracias a los comentarios de mas arriba. Con respecto a lo del jdk, no sabe nadie nada?

Edito:
public static void main(String[] args){
//El método no es estático
      Numero n1=new Numero(0);
      long i = 25;
      System.out.println(n1.esPrimo(i));
}
   


carlos@carlos-pc-linux:~/documentos/facultad/1º/Programacion/Practicas Prog I/P5$ java Numero
25 es primo
true


EDITO2: resuelto, tenia razón Ealdor. Fallo estaba aqui

for(int i=3; i<numero/2; i=i+2){
               if(numero%i ==0) resultado=false;

Con esto valia ya. GRacias ^^
8 respuestas