java,ArrayList,code morse

162
06 апреля 2018, 19:10

у меня задание написать программу в java, что-бы из простого алфавита переводил в азбуку морзе, нельзя использовать hashmap, hashset, выдает ошибку

Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.IndexOutOfBoundsException: Index: 65, Size: 0
    at java.base/java.util.ArrayList.rangeCheckForAdd(ArrayList.java:685)
    at java.base/java.util.ArrayList.add(ArrayList.java:494)
    at com.company.Main.<clinit>(Main.java:25)
package com.company;
import java.util.ArrayList;
import java.util.List;
public class Main{
    final static String[][] code = {
            {"A", ".-     "}, {"B", "-...   "}, {"C", "-.-.   "}, {"D", "-..    "},
            {"E", ".      "}, {"F", "..-.   "}, {"G", "--.    "}, {"H", "....   "},
            {"I", "..     "}, {"J", ".---   "}, {"K", "-.-    "}, {"L", ".-..   "},
            {"M", "--     "}, {"N", "-.     "}, {"O", "---    "}, {"P", ".--.   "},
            {"Q", "--.-   "}, {"R", ".-.    "}, {"S", "...    "}, {"T", "-      "},
            {"U", "..-    "}, {"V", "...-   "}, {"W", ".-   - "}, {"X", "-..-   "},
            {"Y", "-.--   "}, {"Z", "--..   "}, {"0", "-----  "}, {"1", ".----  "},
            {"2", "..---  "}, {"3", "...--  "}, {"4", "....-  "}, {"5", ".....  "},
            {"6", "-....  "}, {"7", "--...  "}, {"8", "---..  "}, {"9", "----.  "},
            {"'", ".----. "}, {":", "---... "}, {",", "--..-- "}, {"-", "-....- "},
            {"(", "-.--.- "}, {".", ".-.-.- "}, {"?", "..--.. "}, {";", "-.-.-. "},
            {"/", "-..-.  "}, {"-", "..--.- "}, {")", "---..  "}, {"=", "-...-  "},
            {"@", ".--.-. "}, {"\"", ".-..-."}, {"+", ".-.-.  "}, {" ", "/"}};
    final static List<String> ascii = new ArrayList<String>();
static {
    for (String[] pair : code){
        ascii.add(pair[0].charAt(0), pair[1].trim());
    }
}
    public static void main(String[] args){
        printMorse("   Hello     World!");
    }
    static void printMorse(String input) {
        System.out.printf("%s %n", input);
        input = input.trim().replaceAll("[ ]+", " ").toUpperCase();
        for (char c : input.toCharArray()) {
            String s = ascii.get(c);
            if (s != null){
                System.out.printf("%s ", s);
            }
        }
        System.out.println("\n");
    }
}
Answer 1

Проблема в строке

ascii.add(pair[0].charAt(0), pair[1].trim());

Дело в том что pair[0].charAt(0) это char, что в Java одно и то же что и int. Когда ты пытаешься заполнить ascii, в частности при добавлении буквы A, ты пытаешься вставить 65-ый элемент списка. А список на этот момент состоит из 0 элементов. Собственно, ошибка об этом и говорит.

java.lang.IndexOutOfBoundsException: Index: 65, Size: 0

Т.е. список пустой, а ты сразу пихаешь в него 65-ый элемент

Тебе нужен другой подход к формированию списка ascii

например, список ascii может быть типа List<Pair<String, String>>

правда, такого класса в Java нет, но его легко написать

public class Pair<F, S> {
    public final F first;
    public final S second;
    /**
     * Constructor for a Pair.
     *
     * @param first the first object in the Pair
     * @param second the second object in the pair
     */
    public Pair(F first, S second) {
        this.first = first;
        this.second = second;
    }
}

Хотя вообще способов много

READ ALSO
Актуальны ли джава сервлеты?

Актуальны ли джава сервлеты?

Насколько я знаю джава апплеты мёртвая технология, не относится ли это к сервелетам?

157
Как построить пирамиду, применить к ней текстуру и осветить ее?

Как построить пирамиду, применить к ней текстуру и осветить ее?

Как построить пирамиду, применить к ней текстуру и осветить ее?

141
В строке нужно подсчитать сколько раз встречается каждое слово

В строке нужно подсчитать сколько раз встречается каждое слово

Здравствуйте! Задача такая: в строке нужно подсчитать сколько раз встречается каждое словоК примеру, строка: «one two three»

163
Операции приведения типов С++

Операции приведения типов С++

Всем приветИзучая книгу Бьярне Страуструпа, я наткнулся на интересный, по моему мнению, пример:

130