Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: m@o_614 en 13 Mayo 2012, 01:12 AM

Título: Error en llamada a metodo
Publicado por: m@o_614 en 13 Mayo 2012, 01:12 AM
Saludos
Tengo el siguiente  codigo que me calcula  los impuestos(ISR, IVA,etc...) de los ingresos y gatos que le voy ingresando de acuerdo al mes que se elija, pero  en el método calculaImpuestos cuando me imprime ISR(por_isr) me lo imprime en 0, cuando deberia ser 11%, 15% o 20% de acuerdo al rango en el que se encuentre

Código (java) [Seleccionar]
public class Impuestos {
//variables globales de uso interno del programa
final int MESES=12;
int mes_elegido=1;
String meses[]=new String[MESES];
double rango_monto[][]=new double[3][2];
int porcentaje_ISR[]=new int[3];
//Arreglo de ingresos y gastos
final double ingresos[]=new double[MESES];
final double gastos[]=new double[MESES];
final double IVA=16.0;
final double POR_RET_IVA=10.0;
final double POR_RET_ISR=10.0;
public void inicializa(String meses[],double rango_monto[][],int porcentaje_ISR[]){
this.meses[0]="Enero";
this.meses[1]="Febrero";
this.meses[2]="Marzo";
this.meses[3]="Abril";
this.meses[4]="Mayo";
this.meses[5]="Junio";
this.meses[6]="Julio";
this.meses[7]="Agosto";
this.meses[8]="Septiembre";
this.meses[9]="Octubre";
this.meses[10]="Noviembre";
this.meses[11]="Diciembre";
this.rango_monto[0][0]=0;
this.rango_monto[0][1]=10000.00;
this.rango_monto[1][0]=10000.00;
this.rango_monto[1][1]=20000.00;
this.rango_monto[2][0]=20000.00;
this.rango_monto[2][1]=10000000.00;
this.porcentaje_ISR[0]=11;
this.porcentaje_ISR[1]=15;
this.porcentaje_ISR[2]=20;
}

public double monto(double gan_bruta)
{
double por_isr;
if((gan_bruta>rango_monto[0][0])&&(gan_bruta<=rango_monto[1][0]))
por_isr= porcentaje_ISR[0];
else
if((gan_bruta>rango_monto[1][0])&&(gan_bruta<=rango_monto[2][0]))
por_isr= porcentaje_ISR[1];
else
if(gan_bruta>rango_monto[2][0])
por_isr= porcentaje_ISR[2];
else
por_isr=0;

return(por_isr);
}

public static void main(String[] args) {
//constantes
final int CAPTURA_MES=1;
final int CAP_INGRESO=2;
final int CAP_GASTOS=3;
final int L_INGR_ANUALES=4;
final int L_GAST_ANUALES=5;
final int CALC_IMPUESTOS=6;
final int SALIR=7;
final int MESES=12;
//variables globales de uso interno del programa
String meses[]=new String[MESES];
int porcentaje_ISR[]=new int[3];
double rango_monto[][]=new double[3][2];
//variables del programa modificables por el usuario
Impuestos c=new Impuestos();
c.inicializa(meses,rango_monto,porcentaje_ISR);
int opcion;
boolean continuar = true;
do
{
c.mostrarMenu();
opcion=ScanF.leeInt();
System.out.println(" "+opcion);
switch(opcion)
{
case CAPTURA_MES:
c.capturaMes();
break;
case CAP_INGRESO:
c.capturaIngreso();
break;
case CAP_GASTOS:
c.capturaGasto();
break;
case L_INGR_ANUALES:
c.listaIngresoAnual();
break;
case L_GAST_ANUALES:
c.listaGastoAnual();
break;
case CALC_IMPUESTOS:
c.calculoImpuestos();
break;
case SALIR:
continuar = false;
break;
default:System.out.println("Opcion no valida!");
}
if(continuar){
System.out.println("Presione tecla para continuar...");

}
}while(continuar);
}

void capturaMes()
{
System.out.println("Establecer mes para captura");
for(int i=0,indice=0;i<MESES;i++,indice++)
System.out.printf("%d) %s\n",indice+1,meses[i]);
System.out.println("Elige el mes (1 a 12):");
mes_elegido=ScanF.leeInt();
System.out.println(" "+mes_elegido);
if(mes_elegido > MESES)
System.out.println("Mes no valido!");
else
System.out.println("Se ha establecido el mes de captura en "+meses[mes_elegido-1]);
}
public void capturaIngreso()
{
float ingreso;
System.out.println("Captura ingresos");
System.out.printf("Dame el ingreso del mes de "+meses[mes_elegido-1]+":");
ingreso=ScanF.leeInt();
System.out.println(" "+ingreso);
ingresos[mes_elegido-1] = ingreso;
}

public void capturaGasto()
{
float gasto;
System.out.println("Captura gastos");
System.out.printf("Dame el gasto del mes de %s: ",meses[mes_elegido-1]);
gasto=ScanF.leeInt();
System.out.println(" "+gasto);
gastos[mes_elegido-1] = gasto;
}

void listaIngresoAnual()
{
System.out.println("Mostrar lista de ingresos anual");
for(int i=0;i<MESES;i++)
System.out.println(" "+meses[i]+" = "+ingresos[i]);
}

void listaGastoAnual()
{
System.out.println("Mostrar lista de gastos anual");
for(int i=0;i<MESES;i++)
System.out.println(" "+meses[i]+" = "+gastos[i]);
}

void calculoImpuestos()
{
Impuestos r=new Impuestos();
double iva,subtotal,ret_isr,ret_iva,total,gan_bruta,isr,gan_neta,isr_pag,gasto_iva,iva_pag;
double  por_isr,ingreso_tot=0,gasto_tot=0;

for(int i=0;i<MESES;i++)
{
ingreso_tot+=ingresos[i];
gasto_tot+=gastos[i];
}

iva=(ingreso_tot*IVA)/100;
subtotal=ingreso_tot+iva;
ret_isr=(ingreso_tot*POR_RET_ISR)/100;
ret_iva=(ingreso_tot*POR_RET_IVA)/100;
total=subtotal-(ret_isr+ret_iva);
gan_bruta=(ingreso_tot-gasto_tot);
por_isr=r.monto(gan_bruta);
isr=(gan_bruta*por_isr)/100;
gan_neta=(gan_bruta-isr);
isr_pag=(isr-ret_isr);
gasto_iva=(gasto_tot*IVA)/100;
iva_pag=(iva-gasto_iva-ret_iva);
System.out.println("CALCULO DE IMPUESTOS");

System.out.println("***Tabla de Recibo de Honorarios***");
System.out.println("Ingresos\t\t"+ingreso_tot);
System.out.println("(+) IVA\t\t\t"+iva);
System.out.println("(=) Subtotal\t\t"+subtotal);
System.out.println("(-) Retención ISR\t"+ret_isr);
System.out.println("(-) Retención IVA\t"+ret_iva);
System.out.println("(=) Total\t\t"+total);
System.out.println("***Tabla Ganancias***");
System.out.println("Ingresos\t\t"+ingreso_tot);
System.out.println("(-) Gastos\t\t"+gasto_tot);
System.out.println("(=) Ganancia Bruta\t"+gan_bruta);
System.out.println("(-) ISR "+por_isr+"%\t\t"+isr);
System.out.println("(=) Ganancia Neta\t"+gan_neta);
System.out.println("***Tabla ISR***");
System.out.println("ISR "+por_isr+"%\t\t"+isr);
System.out.println("(-) ISR Retenido\t"+ret_isr);
System.out.println("(=) ISR a Pagar\t\t"+isr_pag);
System.out.println("***Tabla IVA***");
System.out.println("IVA\t\t\t"+iva);
System.out.println("(-) Gastos IVA\t\t"+gasto_iva);
System.out.println("(-) Retención IVA\t"+ret_iva);
System.out.println("(=) IVA a Pagar\t\t"+iva_pag);
}
void mostrarMenu()
{
System.out.println("CALCULO DE IMPUESTOS ANUAL");

System.out.println("Menu principal:");
System.out.println("1. Establecer mes para la captura (mes actual es "+meses[mes_elegido-1]+")");
System.out.println("2. Captura de ingresos");
System.out.println("3. Captura de gastos");
System.out.println("4. Mostrar lista de ingresos anual");
System.out.println("5. Mostrar lista de gastos anual");
System.out.println("6. Calculo de impuestos anual");
System.out.println("7. Salir");

System.out.println("Opcion: ");
}
}


el error esta en la siguiente linea

Código (java) [Seleccionar]
System.out.println("(-) ISR "+por_isr+"%\t\t"+isr);
y no se si se deba a que en la llamada a método estoy haciendo algo indebido
Código (java) [Seleccionar]
por_isr=r.monto(gan_bruta);

de antemano gracias
Título: Re: Error en llamada a metodo
Publicado por: [Case] en 13 Mayo 2012, 08:21 AM
Error en que sentido? Que el metodo no hace lo que quieres? o el metodo falla y hace que termine el programa?
Título: Re: Error en llamada a metodo
Publicado por: m@o_614 en 13 Mayo 2012, 18:33 PM
No, el codigo compila bien hace lo que le pido a excepción de esa parte, cuando imprime el ISR
Título: Re: Error en llamada a metodo
Publicado por: RyogiShiki en 13 Mayo 2012, 18:52 PM
has revisado tu lógica? tus operaciones? las asignaciones si se hacen en los momentos correctos? El flujo de ejecución está un poco enredado, y por eso mismo es un poco molesto revisarlo y seguirlo linea a linea. Y bueno estás usando Java un lenguaje orientado a objetos como si fuera un lenguaje estructurado. Revisa las abstracciones que necesitas y el diseño que estás usando.

Espero sea de ayuda.

Saludos
Título: Re: Error en llamada a metodo
Publicado por: [Case] en 14 Mayo 2012, 01:03 AM
Pues si es cierto esto parece programacion estruturada en todo sentido, seria bueno que intentaras aprovechar el paradigma del lenguaje.