Я не уверен, что добавить в свой оператор try, и я продолжаю получать ошибку "Ecxeption in thread" main "" - PullRequest
0 голосов
/ 10 февраля 2019

Всякий раз, когда я пытаюсь запустить свой код, он получает два первых оператора печати перед тем, как выдать мне исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: индексировать 0 за пределами длины 0 в шаблонах .SentenceUtilsTest.main (SentenceUtilsTest.java:26)

Я так растерялся, мой профессор не объяснил операторов try-catch, и это огромный скачок в сложности с нашего предыдущего задания.

Естьдругой класс в пакете.

package templates;

public class SentenceUtilsTest 
{

private static List<SentenceUtils> sList = new ArrayList<SentenceUtils>();


public static void main(String[] args) 
{
    System.out.println("\n---------------------------------------------------\n");
    System.out.println("COP3330 Sentence Utility Program by [name]");
        System.out.println("\nInput file name: " + args[ 0 ] );

        try
        {
            File file = new File("cat.txt");
            Scanner scanner = new Scanner(file);

            //insert code

            scanner.close();
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
    }

}

Я включаю файл второго класса на случай, если это проблема.Мы должны сканировать файл из другого класса и поместить его в строки этого класса.В нашей последней программе не было нескольких классов, и она была очень кратко освещена в классе, и я очень растерялся и запутался.

public class SentenceUtils 
{
  private String sentence;
  private String[] tokens;
  private String[] shingles;



public SentenceUtils( String s )
{
 sentence = s;
 generateTokens();
 generateShingles();
}

private void generateTokens()
{
  //code

}

 private void generateShingles()
 {
  //code
 }

 public void report()
 {
   //code
 }
}

Вывод

---------------------------------------------------

COP3330 Sentence Utility Program by [name] 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 
0 out of bounds for length 0
at templates.SentenceUtilsTest.main(SentenceUtilsTest.java:26)

Ожидаемый вывод

---------------------------------------------------

COP3330 Sentence Utility Program by [name]

Input file name: [file name]
Number of sentences: [number]

Sentence 0 >

//The next parts are from the second class, specifically report()
The cat in the hat

Tokens:
0:The
1:cat
2:in
3:the
4:hat

Shingles:
//I have the logic for this laid out in my program, didn't think it 
//necessary to copy and paste though

1 Ответ

0 голосов
/ 10 февраля 2019

Здесь:

 System.out.println("\nInput file name: " + args[ 0 ] );

Вы безоговорочно печатаете аргументы [0].

Трассировка стека говорит вам, что вы не можете напечатать первый индекс (0) массива, который имеет длину 0. Это так просто: пустой массив не имеет никакого индекса.args содержит аргументы, передаваемые JVM при вызове вашего класса.Так что, если вы не передадите ему значения, он будет полностью пустым!

Итак, вы должны либо передать хотя бы одно значение в приложение, либо вам понадобится какая-то проверка, например

if (args.length < whateverValueYouExcpect) {
  give error message

И урок № 1: вы не пытаетесь / ловите исключения, которые вы не понимаете (ожидайте, что произойдет)!Такими исключениями являются ошибки в вашем коде, вы отлаживаете их и исправляете основную причину.

...