2

私はコーディングが初めてで、vb に関する知識が限られています。私はその知識を Java でキャッチしようとしており、入力に基づいて配列を検索し、ループと多次元配列について学習するのに役立つ情報を出力する単純な検索 Java プログラムを作成しようとしています。

コードが機能しない理由がわかりません。

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.
    }
}

これは私が出力のために得たものですが、それが何を意味するのかわかりません:

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)

単純な問題のように思えますが、検索機能を使用して質問について多くを見つけることができませんでした。

私が試みていることを行うにはおそらくもっと簡単な方法があり、それに興味がありますが、私の方法が機能しない理由も知りたいです。

4

2 に答える 2

5

配列インデックスは から0まで実行されますN - 1。ここNで、 は配列内の要素の数です。したがって、のインデックスは、要素2を持つ配列の末尾の 1 つ後ろになります。2

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

tempNumの初期化は配列の 2 番目の要素から開始され、ビールの名前は実際には にあることに注意してくださいbeer[tempNum][0]

詳細については、Java 言語仕様の配列の章を参照してください。

配列を反復処理するために使用できる拡張 for ループについて言及するだけです。

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

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

多次元配列を使用する代わりにMap、ビールの名前がキーで、在庫レベルが値である実装の 1 つを使用することもできます。

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);
}
于 2012-11-21T10:13:13.253 に答える
0

問題の別の解決策を尋ねている部分では、以下を試すことができます。

package com.nikoskatsanos.playground;

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

        boolean found = false;
        int index = 0;
        while(!found) {
            if(beer[index][0].equals(beerQ.toUpperCase())) {
                found = true;
                continue;
            }
            index ++;
        }
        System.out.println("The stock of " + beerQ + " is " + beer[index][1]); //printing the corresponding stock.
    }
}

オラクルの Web サイトのチュートリアルに従ってください。それらは非常に優れており、Java の基本を非常に速く学習できます。

http://docs.oracle.com/javase/tutorial/

于 2012-11-21T10:36:31.547 に答える