Duda ejercicio contar positivos y negativos JAVA.

rbn01

Hola, tengo que realizar un ejercicio en Java que cuente numeros positivos y negativos atraves de los argumentos que se le pasan por consola.

He llegado a realizar esto:

																																																	
		// Programa que recibe una cadena de numeros enteros como argumentos y dice cuantos de ellos son positivos y cuantos negativos.

public class ContadorPositivosNegativos {


public static void main(String[]args){

int positivos = 0; 
int negativos = 0; 

int i =0;

int numArgs = args.length;
int[] numeros = new int[numArgs];



  if (numArgs==0)
      System.out.println("El numero de argumentos es 0, inserte un numero superior de argumentos.");

  else {
    System.out.println("Contador de numeros enteros positivos y negativos.");

      for (i=0;i<numArgs;i++) {
		
        if (esPositivo(numeros[i]))
        { positivos++;
        }		
        else {
          negativos++;
        }
      }

        System.out.println("Positivos: " + positivos);
        System.out.println("Negativos: " + negativos);
  }	

}






private static boolean esPositivo (int numero){
	
		if(numero>0)
			return true;
		else {
			return false;
		}
		
	}

}


me compila, pero me cuenta todos como positivos.

Si alguien me pudiese ayudar de alguna forma le estaría muy agradecido, muchas gracias.

1
Lutx1

El problema es que

int numArgs = args.length;
int[] numeros = new int[numArgs];

lo que estas guardando es el numero de elementos que te han introducido y no los valores en si.

1 respuesta
rbn01

#2
Gracias, ¿cómo podría solucionarlo? No se me ocurre nada.

boqueron

No me queda claro lo de una cadena de números enteros como argumento de entrada.

Que recibe una cadena tipo -1212 2232 233 2233 444 555 ¿?¿???

Por otra parte no usaría 1 método para saber si un numero es positivo, hazlo en la propia comprobación, mejoras rendimiento y menos uso de memoria:

if (numeros [ i ]>0){
positivos++; }

else if (numeros[ i ]<0){
negativos++; }
else { //aqui compruebo si es un 0, ya que no es ni negativo ni positivo
}

1 respuesta
rbn01

#4
Si, es eso a lo que me refiero. El uso de otro metodo para comprobar si es negativo o positivo mediante boolean es obligatorio.

Muchas gracias, a ver si me sale

1 respuesta
boqueron

#5 ok, pues un consejo, usa el array args que se crea y genera en la llamada al metodo main de tu programa, tal que asi:

for (i=0;i<args.length;i++) {

    if (esPositivo(args[ i ]))
    { positivos++;
    }       
    else {
      negativos++;
    }
  }

    System.out.println("Positivos: " + positivos);
    System.out.println("Negativos: " + negativos);

}

Y para ser mas precavidos, hacer un control de los datos que se le meten, comprobar que si un valor de args[ i ] no es un numero no te pete, que lo descarte o indique que se ha metido un valor en el string que difiere de un numero.

1
rbn01

Muchas gracias gente, he conseguido que me funcione, aquí lo dejo por si le vale a alguien:
public class ContadorPositivosNegativos {


public static void main (String[]args) {

	int x = 0;
	int y = 0;
	int z;
	int i;
	
	System.out.println("Contador");
if (args.length!=0) {
	for(i=0; i<args.length; i++) {
		z = Integer.parseInt(args[i]);
		if(esPositivo(z)) {
			x++;
		} else
			y++;
	}
	System.out.println("Positivos: " +y);
	System.out.println("Negativos: " +x);
} else
	System.out.println("Debe introducir uno o mas arg");

}

private static boolean esPositivo(int z) {

return z>0; 	

}
}

1 1 respuesta
Geekalvaro

#7 Pero estás contando el 0 como un negativo no? El 0 no debe sumarse en ningún caso, supongo.
Yo lo haría así.

public static void main(String[] args) {
   int positivos = 0;
   int negativos = 0;
   int num;
   for(String arg : args){
      num = Integer.parseInt(arg);
      if(num > 0)
         positivos++;
      else if(num<0)
         negativos++;
   }
}

Luego añádele las validaciones que quieras a los argumentos. Y da la salida como prefieras.

1

Usuarios habituales

  • Geekalvaro
  • rbn01
  • boqueron
  • Lutx1