Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: dharhuu en 23 de Septiembre 2019, 08:47

Título: java error required found reason actual and formal argument lists differ in leng
Publicado por: dharhuu en 23 de Septiembre 2019, 08:47
Hola, estoy intentando hacer este programa:

Código: [Seleccionar]
import java.util.*;
public class progclassarrayprueba2
{
   public static void main(String args[])
   {
     
     
      Scanner in=new Scanner(System.in);
     
      int n=3;
     
      classarrayX unir= new classarrayX();
      System.out.println("ingreso los datos : ");
     
      for(int i=1;i<=n;i++)//
      {
        int  leer=in.nextInt(); //
         unir.ingreso(leer,i);//
      }
       
      System.out.println("la solucion es :  ");
       
      unir.parimpar(n);//
   }
}

---------------------------------------------------

Código: [Seleccionar]
class classarrayX  {
   int leer;
 
   public void ingreso(int x){
      leer=x;
                                   }
   
   public void parimpar(int n)                {
      int j=0;//contador
      int k=0;//contador
      for(int i=1;i<=n;i++)
      {
         if(leer%2==0) {//
            j++;
                       }
         
         if(leer%2!=0) {//
            k++;
                       }
      }
      System.out.println("numero pares "+j);
      System.out.println();
      System.out.println("numero impares "+k);
                                               }
}


Cuando compilo el  primero, pues no presenta error, pero al compilar class progclassarrayprueba2 me sale este error:

unir.ingreso(leer,i);//llama a la clase void ingreso
             ^
  required: int
  found: int,int
  reason: actual and formal argument lists differ in length
1 error


Agradezco su ayuda, por favor :/
Título: Re:ayuda en mi codigo
Publicado por: Kabuto en 23 de Septiembre 2019, 21:21
Citar
me sale este error:
unir.ingreso(leer,i);//llama a la clase void ingreso

Ese error significa que el método ingreso() está programado para recibir un int por paréntesis.

Código: [Seleccionar]
  public void ingreso(int x){
      leer=x;
                                   }

Pero tú le estás pasando dos: leer e i

Quita la i del paréntesis, no puede aceptarla y además no la necesita.
Título: Re:ayuda en mi codigo
Publicado por: settezza en 23 de Septiembre 2019, 23:55
Lo mismo que kabuto, el método ingreso(int x) solo requiere una variable pero estás enviando dos : unir.ingreso(leer,i).
Como recomención en este caso
Código: [Seleccionar]
if(leer%2==0) {//
            j++;
                       }
         
         if(leer%2!=0) {//
            k++;
                       }
podrias hacer lo siguiente ya que si %2 es distinto de 0 no hay para que usar otro if
Código: [Seleccionar]
if(leer%2==0{
   j++;
}else{
   k++;
}
no recuerdo bien la nomenclatura de java pero la idea es esa
Título: Re:ayuda en mi codigo
Publicado por: dharhuu en 24 de Septiembre 2019, 08:21
Gracias, a los dos por responder, el programa ya corre .
Pero da mal el resultado, pongo 2 3 1 , y me dice que todos son impares, y así probando con cualquier número siempre es impar
Título: Re:ayuda en mi codigo
Publicado por: settezza en 24 de Septiembre 2019, 09:27
Hola, pasa que al momento de declarar la variable n la estás inicializando con el valor 3
Código: [Seleccionar]
Scanner in=new Scanner(System.in);     
int n=3;
Despues al método parimpar le envías n como parámetro, pero no veo que n cambie de valor
Código: [Seleccionar]
unir.parimpar(n);//Siempre estás evaluando el número 3, prueba cambiar el valor de n por un número par.
Además estás utilizando n para la condición del for() quizás sea mejor cambiar el nombre por alguno mas descriptivo para que no te confundas mientras aprendes lo fundamental, por ejemplo nIngresos para la condición del for.
Analiza cual es la variable que debes pasar al método parimpar() y en qué lugar debe estar la llamada a ese método

Título: Re:ayuda en mi codigo
Publicado por: dharhuu en 26 de Septiembre 2019, 23:13
Código: [Seleccionar]
import java.util.*;
public class progclassarrayprueba2
{
   public static void main(String args[])
   {
     
     
      Scanner in=new Scanner(System.in);
     
      int numero=3;
     
      classarrayX unir= new classarrayX();
      System.out.println("ingreso los datos : ");
     
      for(int i=0;i<3;i++)
      {
        int  leer=in.nextInt();
         unir.ingreso(leer);
      }
       
      System.out.println("la solucion es :  ");
       
      unir.parimpar(numero);
   }
}


Y la clase pura.

Código: [Seleccionar]
class classarrayX  {
   int leer;
 
   public void ingreso(int x){
      leer=x;
                                   }
   
   public void parimpar(int leyendo)                {
      int j=0;//contador
      int k=0;//contador
      for(int i=1;i<=leyendo;i++)
      {
         if(leer%2==0) {//par
            j++;
                       }
         
          else {//impar
            k++;
                       }
      }
      System.out.println("numero pares "+j);
      System.out.println();
      System.out.println("numero impares "+k);
                                               }
}

Como estoy analizando 3 números, si mi ultimo número es impar, me dice que los 3 son impares

Pero si mi ultimo número es un par, me dice que los 3 son pares.

Este tema de objetos y clases es nuevo para mí, no sé en dónde pueda estar el error.
Título: Re:ayuda en mi codigo
Publicado por: Kabuto en 27 de Septiembre 2019, 23:07
Tienes diversos errores, el principal es que las variables j y k que usas como contadores, se reinician a 0 cada vez que invocas al método parImpar().

Y además, en la variable "leer" solo tienes un número. Da igual si pides 3 números, o si pides 300... solo vas a tener almacenado el último número leído.

Si quieres almacenar varios números, necesitas poner un array.

Sin embargo, en realidad no necesitas ningún array. Si lo que quieres es una clase que evalúe números introducidos por el usuario y luego te diga cuántos pares e impares ha encontrado, solo necesitas crear una clase con dos atributos: uno para contar pares y otro para contar impares.

Y que tenga dos métodos, uno para evaluar números y otro para que muestre en pantalla cuantos pares e impares lleva contados.
Algo así:

Código: [Seleccionar]
public class CuentaParesImpares {

private int pares;
private int impares;

public CuentaParesImpares() {
pares = 0;
impares = 0;
}

public void parImpar(int numero) {
if (numero %2 == 0)
pares++;
else
impares++;
}

public void resultados() {
System.out.println("Pares encontrados: " + pares);
System.out.println("Impares encontrados: " + impares);
}

}

Y se puede poner a prueba en este main:

Código: [Seleccionar]
public class Test {

public static void main(String[] args) {
CuentaParesImpares cpi = new CuentaParesImpares();
Scanner teclado = new Scanner(System.in);

//Pedimos 5 numeros
for (int i = 0; i < 5; i++) {
System.out.print("Introduzca número: ");
cpi.parImpar(teclado.nextInt());
}

//Mostramos resultado
System.out.println("\nResultados:");
cpi.resultados();

teclado.close();
}

}

Y tenemos este resultado en pantalla:
Código: [Seleccionar]
Introduzca número: 2
Introduzca número: 12
Introduzca número: 3
Introduzca número: 30
Introduzca número: 1

Resultados:
Pares encontrados: 3
Impares encontrados: 2


Esta es una solución prescindiendo de un array, ya que como vemos, no es necesario.
Puede que el enunciado de tu ejercicio te pida usar un array, entonces sí habría que enfocarlo de otro modo.
Título: Re:ayuda en mi codigo
Publicado por: dharhuu en 30 de Septiembre 2019, 05:16
Citar
Esta es una solución prescindiendo de un array, ya que como vemos, no es necesario.
Puede que el enunciado de tu ejercicio te pida usar un array, entonces sí habría que enfocarlo de otro modo.


Código: [Seleccionar]
import java.util.*;
public class progclassarray
{
   public static void main(String args[])
   {
      int [] A = new int [20];
     
      Scanner in=new Scanner(System.in);
     
      System.out.print("ingrese numero de elemntos a evaluar  : ");
      int n=in.nextInt();
     
      classarray unir= new classarray();
      System.out.println("ingreso los datos : ");
     
      for(int i=1;i<=n;i++)
      {
         A[i]=in.nextInt();
         unir.ingreso(A[i],i);
      }
       
      System.out.println("la solucion es :  ");
       
      unir.parimpar(n);
   }
}

------------------------------------------

Código: [Seleccionar]
class classarray  {
   int []A=new int [20];
   
   public void ingreso(int x,int i){
      A[i]=x;
                                   }
   
   public void parimpar(int n)                {
      int j=0;
      int k=0;
      for(int i=1;i<=n;i++)
      {
         if(A[i]%2==0) {
            j++;
                       }
         
         if(A[i]%2!=0) {
            k++;
                       }
      }
      System.out.println("numero pares "+j);
      System.out.println();
      System.out.println("numero impares "+k);
                                               }
}


Este era el ejemplo que me dieron, y si era con un array, y yo tenia que hacerlo sin usar uno.

Gracias por la ayuda, saludos.