Mi búsqueda de matriz en Java no funcionará

He creado una matriz de "información de cuenta de cheques" de 3 personas diferentes, y necesito poder usar el resto de los datos del cliente en otras partes de mi código si una entrada de un usuario coincide con uno de los "números de cuenta" del cliente. en mi matriz.

Por ejemplo, si un usuario ingresa 12345678, mi código deberá buscar en la matriz, hacer coincidir esa entrada con la cuenta de "Jon" y luego usar la información de Jon para otras cosas en el código. Básicamente estoy escribiendo software para cajeros automáticos.

Mi problema radica en hacer coincidir el número de cuenta con las entradas del usuario. Los números de cuenta son los últimos elementos en cada parte de la matriz "cac".

¿Alguien podría decirme qué estoy haciendo incorrectamente?

CheckingAccountCustomer[] cac = new CheckingAccountCustomer[3]; // array of checking account customers, names, pins, balances, account numbers
    cac[0] = new CheckingAccountCustomer("Joe", 1234, 5000, 11111111);
    cac[1] = new CheckingAccountCustomer("Bob", 1111, 9000, 24606069);
    cac[2] = new CheckingAccountCustomer("Jon", 2222, 40000, 12345678);



    // prompt user for account number
    System.out.print("Please insert Debit Card or enter account number (8 digits):\n");
    sc.nextLine();
    int accountNumber = sc.nextInt();

    for (int i = 0; i < cac; i++)
    {
        if (accountNumber == cac[i][3])

            // DO STUFF WITH OTHER DATA
    }

preguntado el 05 de mayo de 13 a las 21:05

cual es el error que estas viendo -

donde está "cac[i][3]", mi compilador dice que "Este tipo de expresión debe ser un tipo de matriz, pero se resolvió en CheckingAccountCustomer" -

Tal vez quieras cac[i].accountNumber? tu escribiste el CheckingAccountCustomer clase, no nosotros. -

5 Respuestas

En primer lugar, su declaración for debe decir:

for (int i = 0; i < cac.length; i++)

Y segundo: la referencia cac[i][3] podría estar equivocado también, dependiendo de la definición del CheckingAccountCustomer clase.

contestado el 05 de mayo de 13 a las 21:05

Creo que debería haber i < cac.length no cac, Desde cac es una matriz.

De cualquier manera, utilice un Map donde clave es ese número deseado, sería más rápido.

contestado el 05 de mayo de 13 a las 21:05

No está iterando correctamente en la matriz. Debería usar el siguiente bucle for:

for (int i = 0; i < cac.length; i++) {

}

Además, tienes otro problema interesante. accountNumber == cac[i][3] no es válido, ya que cac es solo una matriz unidimensional. Si eliminamos el acceso a la dimensión adicional, le queda accountNumber == cac[i].

Pero tenemos una alternativa, problema interesante ¿Por qué un int igual CheckingAccountCustomer? Eso nunca será verdad.

Lo que desea usar es algún tipo de acceso en el número de cuenta del objeto.

Entonces, en conjunto, su bucle for debería leerse así:

for (int i = 0; i < cac.length; i++) {
    if(accountNumber == cac[i].getAccountNumber()) {
        // logic.
    }
}

contestado el 05 de mayo de 13 a las 21:05

Esta parece ser la mejor opción para mí, sin embargo, no tenía un accesor y tengo problemas para escribirlo ahora. ¿Sería algo como: return cac[i][3] ? - user2352706

No. La declaración que está intentando hace referencia a una matriz bidimensional, que es algo que no tiene. Un accesor es algo en el CheckingAccountCustomer que devuelve información específica, como el número de cuenta. - Makoto

Debe usar la sintaxis "foreach" para su ciclo:

for :CheckingAccountCustomer c : cac) {
    if (c.getAccountNumber() == accountNumber)

}

Tenga en cuenta que asumí que tiene un método de acceso para el número de cuenta.

contestado el 05 de mayo de 13 a las 21:05

Necesita iterar a través de la matriz. La declaración condicional en el ciclo for está verificando si un int es mayor que un CheckingAccountCustomer[], en lugar de la longitud de la matriz.

El condicional if declaración también está comparando un int a una CheckingAccountCustomer que evaluará, necesita obtener el número de cuenta del CheckingAccountCustomer.

for (int i = 0; i < cac.length; i++)
{
    if (accountNumber == cac[i][3].getAccountNumber())

        // DO STUFF WITH OTHER DATA
}

contestado el 05 de mayo de 13 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.