Error en llamada a metodo

Iniciado por m@o_614, 13 Mayo 2012, 01:12 AM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

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

[Case]

Error en que sentido? Que el metodo no hace lo que quieres? o el metodo falla y hace que termine el programa?

m@o_614

No, el codigo compila bien hace lo que le pido a excepción de esa parte, cuando imprime el ISR

RyogiShiki

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


[Case]

Pues si es cierto esto parece programacion estruturada en todo sentido, seria bueno que intentaras aprovechar el paradigma del lenguaje.