у меня задание написать программу в 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");
}
}
Проблема в строке
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;
}
}
Хотя вообще способов много
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Насколько я знаю джава апплеты мёртвая технология, не относится ли это к сервелетам?
Как построить пирамиду, применить к ней текстуру и осветить ее?
Здравствуйте! Задача такая: в строке нужно подсчитать сколько раз встречается каждое словоК примеру, строка: «one two three»
Всем приветИзучая книгу Бьярне Страуструпа, я наткнулся на интересный, по моему мнению, пример: