2013-12-04 3 views
0

Я пытаюсь создать программу, в которой пользователь вводит первую часть почтового индекса, либо 3, либо 4 символа (я знаю, что это может быть два, но я могу добавить, что в позже), и программа проходит через 2-мерный массив и выводит все значения, которые коррелируют с ним. Я думал, что моя логика звучит в получении подстроки почтового индекса в двухмерном массиве (который формируется из документа csv, который читается в нем в предыдущем разделе кода). Я получаю серию ошибок в консоли, и я понятия не имею, что происходит не так. Просто хотел опубликовать здесь, чтобы узнать, сможет ли кто-нибудь помочь мне в этом. Ниже приведен код метода, отвечающего за проведение этого процесса из:Не удается найти элементы в двухмерном массиве

public void PostCodeSearch(){ 
    ReadingFromAFile(); 
    String StrPstCd = PstCd.getText(); 
    for (int x = 0; x < twod.length; x++) { 
     if (StrPstCd.length() == 3){ 
      String PstCdSub = twod[x][3].substring(0,2); 
      if (StrPstCd.equals(PstCdSub)) { 
       text.append("Price = " + twod[x][1] + " " + "Date of Sale: " + twod[x][2] + " " + "Postcode: " + twod[x][3] + "\n"); 
      } 
     }else if(StrPstCd.length() == 4){ 
      String PstCdSub = twod[x][3].substring(0,3); 
      if(StrPstCd.equals(PstCdSub)){ 
       text.append("Price = " + twod[x][1] + " " + "Date of Sale: " + twod[x][2] + " " + "Postcode: " + twod[x][3] + "\n"); 
      }// end if 
     } 

    }// end for 
} 
+0

каковы ошибки из консоли? – DoubleDouble

+0

Исключение в потоке "АВТ-EventQueue-0" java.lang.StringIndexOutOfBoundsException: индекс строки из диапазона: 3 \t в java.lang.String.substring (Unknown Source) \t в ExampleGUI.PostCodeSearch (ExampleGUI.java:117) \t в ExampleGUI.actionPerformed (ExampleGUI.java:76) \t в java.awt.Button.processActionEvent (Unknown Source) \t в java.awt.Button.processEvent (Unknown Source) \t в java.awt.Component .dispatchEventImpl (Неизвестный источник) \t at java.awt.Component.dispatchEvent (Неизвестный источник) \t at java.awt.EventQueue .dispatchEventImpl (Unknown Source) \t в java.awt.EventQueue.access $ 200 (Unknown Source) – user3067835

+0

в java.awt.EventQueue $ 3.run (Unknown Source) \t в java.awt.EventQueue $ 3.run (Unknown Source) \t на java.security.AccessController.doPrivileged (Native Method) \t в java.security.ProtectionDomain $ 1.doIntersectionPrivilege (Unknown Source) \t в java.security.ProtectionDomain $ 1.doIntersectionPrivilege (Unknown Source) \t в java.awt .EventQueue $ 4.run (Неизвестный источник) \t at java.awt.EventQueue $ 4.run (Неизвестный источник) \t at java.security. AccessController.doPrivileged (Native Method) \t в java.security.ProtectionDomain $ 1.doIntersectionPrivilege (Unknown Source) – user3067835

ответ

0

Лучшая догадка, не видя остальную часть вашего кода. Предполагается, что twod является массивом 2d String, где d0 является индексом массива продаж, d1 - мнимым перечислением {UNKNOWN, PRICE, DATE, POSTNUMBER}.

public void PostCodeSearch() { 
    ReadingFromAFile(); 
    String StrPstCd = PstCd.getText(); 

    for (int i = 0; i < twod.length; i++) { 
     for (int x = 0; x < twod[i][3].length; x++) { 

      if (StrPstCd.length == 3 && twod[i][3].length <= x + 3) { 
       String PstCdSub = twod[i][3].substring(x, x + 3); 
       if (StrPstCd.equals(PstCdSub)) { 
        text.append("Price = " + twod[i][1] + " " + "Date of Sale: " + twod[i][2] + " " + "Postcode: " + twod[i][3] + "\n"); 
       } 
      } 

      else if(StrPstCd.length == 4 && twod[i][3].length <= x + 4) { 
       String PstCdSub = twod[i][3].substring(x, x + 4); 
       if (StrPstCd.equals(PstCdSub)) { 
        text.append("Price = " + twod[i][1] + " " + "Date of Sale: " + twod[i][2] + " " + "Postcode: " + twod[i][3] + "\n"); 
       } 
      } 

     } 
    } 
} 

Вы не проверяли, если вы где пытаетесь сравнить StrPstCd с подстроки из границ twod [я] [3] ... и просто перепутали строковые индексы и блок twod indicies немного все вокруг

Если на самом деле что-то вроде

import static java.util.regex.*; 

public void PostCodeSearch() { 
    ReadingFromAFile(); 
    String StrPstCd = PstCd.getText(); 
    Pattern pattern = Pattern.compile("^\\S*" + StrPstCd + "\\S*$"); 
    for(int i = 0; i<twod.length; ++i) { 
     Matcher matcher = pattern.matcher(twod[i][3]); 
     if (matcher.matches()) { 
      text.append("Price = " + twod[i][1] + " " + "Date of Sale: " + twod[i][2] + " " + "Postcode: " + twod[i][3] + "\n"); 
      } 
     } 
    } 
+0

исправлено +4 в первом случае, если это должно было быть +3 – Julius

+0

скорректированный размер() до длины – Julius

+0

Я ушел с моего компьютера на ночь сейчас, поэтому я Я попробую это утром и дам вам знать, как я буду дальше :) – user3067835

Смежные вопросы