Sentencias If y matrices de cadenas de búsqueda utilizando bucles en Java

Soy bastante nuevo en la codificación y solo tengo un conocimiento limitado en vb. Estoy tratando de obtener ese conocimiento en Java y estoy tratando de crear un programa simple de búsqueda en Java que busque una matriz basada en una información de entrada y salida para ayudar a aprender sobre bucles y matrices multidimensionales.

No estoy seguro de por qué mi código no funcionará,

package beers.mdarray;

import java.util.Scanner;

public class ProductTest
{
    public static void main(String[] arg)
    {
        String [][] beer = { {"TIGER", "2"}, {"BECKS", "2"}, {"STELLA", "3"} }; //creating the 2 by 3 array with names of beer and their corresponding stock levels.
        System.out.print("What beer do you want to find the stock of?: ");

        Scanner sc = new Scanner(System.in);
        String beerQ = sc.next(); // asking the user to input the beer name

        int tempNum = 1;
        if (!beerQ.equals(beer[tempNum][1]))
        {
            tempNum = tempNum + 1; //locating he location of the beer name in the array using a loop to check each part of the array.
        }
        System.out.println(beer[tempNum][2]); //printing the corresponding stock.
    }
}

Sin embargo, esto es lo que obtengo para la salida y no estoy seguro de lo que significa:

What beer do you want to find the stock of?: BECKS
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at beers.mdarray.ProductTest.main(ProductTest.java:20)

No pude encontrar mucho sobre mi pregunta usando la función de búsqueda, aunque parece un problema simple.

Probablemente haya una manera más fácil de hacer lo que estoy intentando y me interesaría, pero también quiero saber por qué mi método no funciona.

Respuesta 1

Los índices de matriz se ejecutan de 0a N - 1, donde Nes el número de elementos en la matriz. Entonces, un índice de 2es uno más allá del final de una matriz que tiene 2elementos:

System.out.println(beer[tempNum][2]);
                              // ^ only 0 and 1 are valid.

Tenga en cuenta que la inicialización de tempNumestá comenzando en el segundo elemento en la matriz y el nombre de la cerveza está realmente en beer[tempNum][0].

Consulte el capítulo Arreglos de la Especificación del lenguaje Java para obtener más información.

Solo para mencionar el ciclo for extendido que puede usar para iterar sobre la matriz:

String [][] beers = { {"TIGER",  "2"},
                      {"BECKS",  "2"},
                      {"STELLA", "3"} }; 

for (String[] beer: beers)
{
    if ("BECKS".equals(beer[0]))
    {
        System.out.println(beer[1]);
        break;
    }
}

Una alternativa al uso de una matriz multidimensional sería usar una de las Mapimplementaciones, donde el nombre de la cerveza es la clave y el nivel de existencias es el valor:

Map<String, Integer> beers = new HashMap<String, Integer>();
beers.put("TIGER",  9);
beers.put("BECKS",  2);
beers.put("STELLA", 3);

Integer stockLevel = beers.get("BECKS");
if (stockLevel != null)
{
    System.out.println(stockLevel);
}
Respuesta: 2

Tengo problemas para compilar Scala con Maven o Eclipse, donde trato de importar una clase de un archivo Java que contiene un espacio de nombres y una clase del mismo nombre. Puedo compilar con scalac, ...

Estoy creando una clase que se supone que puede usarse con una matriz de cualquier tipo de número (float, int, etc.), así que aquí hay un método que tengo: // T extiende Número público sincronizado T [] promedio () ...

Entonces, si creo un AlertDialog así: AlertDialog.Builder b = new AlertDialog.Builder (); b.setItems (MyStringArray, MyListener); b.create (). show (); Y luego quiero actualizar los elementos de la lista, ...

Digamos que tengo una clase, que implementa un método (addThings ()). Sirve como base de un árbol de subclases: ParentClass {protected void addThings () {map.add (thing1); ...