
De que otra forma podría resolver este problema?
Publicado por Nata (3 intervenciones) el 24/06/2015 10:42:12
Hola soy nuevo en el mundo de la programación he visto varios videos y leído varios anuales pero no veo otra forma de resolver este problema. El problema consiste en:
Aquí tienen un tarifario de cobro de taxis de mi localidad, en donde la ciudad se divide en 16 zonas. Si vas a la misma zona el costo es de 25. Los demás precios surgen de la combinación de las diferentes zonas aquí dejo la siguiente imagen:

Quisiera hacer un codigo en consola donde el usuario introduzca el punto de origen y el punto del destino y el programa arroja el resultado, pero me he topado con algunos problemas 1.- No puedo englobar las colonias en una sola variable.
Y como no se hacerlo solo evalúo las zonas en general. Pensaba usar Matrices de tipo cadena pero no se como avaluar si un elemento pertenece a una matriz.
asi que solo lo estoy haciendo con las zonas en general. Al parecer la forma que lo hago no es recomendada en programacion por que estoy anidando muchos if... pero no se me ocurre como hacerlo con algun bucle FOR o While case.
Quedaria así
Al final de cuentas se resolvería pero es demasiado código y aun me faltan hacer las otras zonas ya que son 4 hojas como estas en total. En otras palabras el programa no es eficiente.

Si alguien me puede orientar como hacer el código mas eficiente se lo agradecería mucho. Y de paso como hacer que cuando el usuario introduzca el nombre de una colonia el programa ya reconozca la zona y haga la evaluación del precio.
Aquí tienen un tarifario de cobro de taxis de mi localidad, en donde la ciudad se divide en 16 zonas. Si vas a la misma zona el costo es de 25. Los demás precios surgen de la combinación de las diferentes zonas aquí dejo la siguiente imagen:

Quisiera hacer un codigo en consola donde el usuario introduzca el punto de origen y el punto del destino y el programa arroja el resultado, pero me he topado con algunos problemas 1.- No puedo englobar las colonias en una sola variable.
Y como no se hacerlo solo evalúo las zonas en general. Pensaba usar Matrices de tipo cadena pero no se como avaluar si un elemento pertenece a una matriz.
asi que solo lo estoy haciendo con las zonas en general. Al parecer la forma que lo hago no es recomendada en programacion por que estoy anidando muchos if... pero no se me ocurre como hacerlo con algun bucle FOR o While case.
Quedaria así
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import java.util.*;
public class Precios_taxi {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner entrada=new Scanner(System.in);
System.out.println("Introduce el Origen");
String origen=entrada.nextLine();
System.out.println("Introduce el destino");
String destino=entrada.nextLine();
/*EVALUACION BASICA */ if (origen.equals(destino)){
System.out.println("La tarifa es: " + 25);
/*EVALUACION ZONA1 */ }else if (origen.equalsIgnoreCase("zona1") && (destino.equalsIgnoreCase("zona2")
|| destino.equalsIgnoreCase("zona3") || destino.equalsIgnoreCase("zona4")
|| destino.equalsIgnoreCase("zona5")|| destino.equalsIgnoreCase("zona6"))){
System.out.println("La tarifa es: " + 30);
}else if (origen.equalsIgnoreCase("zona1") && (destino.equalsIgnoreCase("zona7")
|| destino.equalsIgnoreCase("zona8") || destino.equalsIgnoreCase("zona9")
|| destino.equalsIgnoreCase("zona10")|| destino.equalsIgnoreCase("zona11")
|| destino.equalsIgnoreCase("zona12")|| destino.equalsIgnoreCase("zona14"))){
System.out.println("La tarifa es: " + 35);
}else if (origen.equalsIgnoreCase("zona1") && (destino.equalsIgnoreCase("zona15")
|| destino.equalsIgnoreCase("zona16") || destino.equalsIgnoreCase("zona13"))){
System.out.println("La tarifa es: "+ 40);
/*EVALUACION ZONA2 */ }else if (origen.equalsIgnoreCase("zona2") && (destino.equalsIgnoreCase("zona1")
|| destino.equalsIgnoreCase("zona3") || destino.equalsIgnoreCase("zona7")
|| destino.equalsIgnoreCase("zona8")|| destino.equalsIgnoreCase("zona9"))){
System.out.println("La tarifa es: " + 30);
}else if (origen.equalsIgnoreCase("zona2") && (destino.equalsIgnoreCase("zona4")
|| destino.equalsIgnoreCase("zona4") || destino.equalsIgnoreCase("zona6"))){
System.out.println("La tarifa es: " + 35);
}else if (origen.equalsIgnoreCase("zona2") && (destino.equalsIgnoreCase("zona10")
|| destino.equalsIgnoreCase("zona11") || destino.equalsIgnoreCase("zona12")
|| destino.equalsIgnoreCase("zona14"))){
System.out.println("La tarifa es: " + 40);
}else if (origen.equalsIgnoreCase("zona2") && (destino.equalsIgnoreCase("zona13")
|| destino.equalsIgnoreCase("zona15") || destino.equalsIgnoreCase("zona16"))){
System.out.println("La tarifa es: " + 45);
}
/*EVALUACION ZONA3 */ else if (origen.equalsIgnoreCase("zona3") && (destino.equalsIgnoreCase("zona1")
|| destino.equalsIgnoreCase("zona2") || destino.equalsIgnoreCase("zona4")
|| destino.equalsIgnoreCase("zona8") || destino.equalsIgnoreCase("zona9"))){
System.out.println("La tarifa es: " + 30);
}else if (origen.equalsIgnoreCase("zona3") && (destino.equalsIgnoreCase("zona5")
|| destino.equalsIgnoreCase("zona6") || destino.equalsIgnoreCase("zona7")
|| destino.equalsIgnoreCase("zona10") || destino.equalsIgnoreCase("zona14"))){
System.out.println("La tarifa es: " + 35);
}else if (origen.equalsIgnoreCase("zona3") && (destino.equalsIgnoreCase("zona11")
|| destino.equalsIgnoreCase("zona12") || destino.equalsIgnoreCase("zona13")
|| destino.equalsIgnoreCase("zona15"))){
System.out.println("La tarifa es: " + 40);
}else if (origen.equalsIgnoreCase("zona3") && destino.equalsIgnoreCase("zona16")){
System.out.println("La tarifa es: " + 45);
}
/*EVALUACION ZONA4 */else if (origen.equalsIgnoreCase("zona4") && (destino.equalsIgnoreCase("zona1")
|| destino.equalsIgnoreCase("zona3") || destino.equalsIgnoreCase("zona5")
|| destino.equalsIgnoreCase("zona10") || destino.equalsIgnoreCase("zona14"))){
System.out.println("La tarifa es: " + 30);
}else if (origen.equalsIgnoreCase("zona4") && (destino.equalsIgnoreCase("zona2")
|| destino.equalsIgnoreCase("zona6") || destino.equalsIgnoreCase("zona8")
|| destino.equalsIgnoreCase("zona9") || destino.equalsIgnoreCase("zona11")
|| destino.equalsIgnoreCase("zona12") || destino.equalsIgnoreCase("zona13")
|| destino.equalsIgnoreCase("zona15"))){
System.out.println("La tarifa es: " + 35);
}
else if (origen.equalsIgnoreCase("zona4") && (destino.equalsIgnoreCase("zona7")
|| destino.equalsIgnoreCase("zona16"))){
System.out.println("La tarifa es: " + 40);
}
else{ System.out.println("Los datos que ingresaste son incorrectos.");
}
}
}
Al final de cuentas se resolvería pero es demasiado código y aun me faltan hacer las otras zonas ya que son 4 hojas como estas en total. En otras palabras el programa no es eficiente.

Si alguien me puede orientar como hacer el código mas eficiente se lo agradecería mucho. Y de paso como hacer que cuando el usuario introduzca el nombre de una colonia el programa ya reconozca la zona y haga la evaluación del precio.
Valora esta pregunta


0