
Array length rebelde
Publicado por Victor (11 intervenciones) el 22/07/2015 10:48:03
Relacionado con una duda anterior. En la linea 74 del código no me admite el valor length de un array dándome un error ArrayIndexOutOfBoundsException, tras hacer un sort del mismo
No entiendo por qué ocurre esto. Si la longitud del array es 7 , ¿por qué no me puede dar el valor de la posición 7? En el código le he puesto -1 para que no dé error, pero no es lógico, imagino.
Gracias
No entiendo por qué ocurre esto. Si la longitud del array es 7 , ¿por qué no me puede dar el valor de la posición 7? En el código le he puesto -1 para que no dé error, pero no es lógico, imagino.
Gracias
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
104
105
106
107
108
109
110
111
112
113
114
115
116
package primos;
import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.Scanner;
/**
* Crea un array de números de un tamaño pasado por teclado, el array contendrá
* números aleatorios primos entre los números deseados, por último nos indicará
* cual es el mayor de todos.
Haz un método para comprobar que el número aleatorio es primo, puedes hacer
todos lo métodos que necesites.
*/
public class Primos {
private static Scanner teclado = new Scanner(System.in);
static int cantidad;
static int acalcular;
static int ntop;
static int ndown;
static String a;
static boolean control=false;
static int primogenerado;
static int elmasalto=0;
/* Entrada de números y cálculo
de los números primos resultantes
*/
public static void main(String[] args) {
// Solicitar cantidad de números a generar
while (!control) {
System.out.println("Introduzca la cantidad de números primos a generar:");
a = teclado.next();
if (chequea() == true) {
acalcular=cantidad;
}
}
control=false;
// Solicitar número más bajo
while (!control) {
System.out.println("¿A partir de qué numero se generarán los números primos?");
a = teclado.next();
if (chequea() == true) {
ndown=cantidad;
}
}
control=false;
// Solicitar número más alto
while (!control) {
System.out.println("¿Hasta qué numero se generarán los números primos?");
a = teclado.next();
if (chequea() == true) {
ntop=cantidad;
}
}
// Presento los números primos generados y los incluyo en un array en el rango indicado.
int primos [] = new int [acalcular-1];
System.out.println("\n\n Los números primos generados son:");
for (int i=0 ; i<primos.length ; i++){
primos [i]=generaprimo();
System.out.println(generaprimo());
}
Arrays.sort(primos);
int fin=primos.length;
System.out.println("\n \n El número primo más alto generado es el "+primos[primos.length-1]);
//System.out.println("El número primo más alto generado es el "+primos[finarray]);
}
/*
*
* MÉTODOS
*
*/
// Método que chequea que la entrada de datos es numérica
static boolean chequea() {
try {
cantidad = Integer.parseInt(a); // aqui convierto de string a int, en caso de que no sea un numero medara el error que incluyo en catch
return control=true;
} catch (NumberFormatException e) {
System.err.println("Error en la entrada de datos. Introduzca un valor correcto.");
return control=false;
}
}
// Método que genera los números primos.
public static int generaprimo(){
control=false;
while(!control){
primogenerado=(int)Math.floor(Math.random()*(ndown-ntop)+ntop);
if (((primogenerado==2)|(primogenerado==3)|(primogenerado==5)|(primogenerado%2>0)&&(primogenerado%3>0)&&(primogenerado%5>0)&&(primogenerado%7>0))&(!(primogenerado==1)))
control=true;
}
return primogenerado;
}
}
Valora esta pregunta


0