2013-04-11 3 views
0

У меня есть приложение, которое преобразует некоторые текстовые файлы в другие тестовые и CSV-файлы (для каждого 3 текстовых файла я генерирую текстовый файл и похожий файл csv). Он заказывает несколько лагерей в соответствии с методом compareTo, разница между текстовыми файлами и файлами cvs заключается в том, что в текстовых файлах у меня есть, например, 27 лагерей, а в файлах csv всего 25, но другая информация такая же, два, что у меня есть какой-то порядок.Может ли сбой сравнивать?

Например, в исходном текстовом файле у меня есть: имя, фамилия, номер телефона, почтовый индекс и номер идентификатора.

В текстовых файлах, которые приложение возвращает, у меня есть: имя, фамилия, почтовый индекс и номер идентификации.

В файлах csv у меня есть: имя, почтовый индекс и номер идентификации.

Проблема заключается в том, что я должен изменить порядок в почтовом индексе со следующим кодом:

public int compareTo(Comunicado otro) { 
    int cod1=Integer.parseInt(this.codigoPostal); 
    int cod2=Integer.parseInt(otro.codigoPostal); 
    if(this.codigoPostal.startsWith("28") && otro.codigoPostal.startsWith("28")==false) 
     cod1=0; 
    else if(this.codigoPostal.startsWith("08") && otro.codigoPostal.startsWith("08")==false) 
     cod1=1; 
    if(otro.codigoPostal.startsWith("28") && this.codigoPostal.startsWith("28")==false) 
     cod2=0; 
    else if(otro.codigoPostal.startsWith("08") && this.codigoPostal.startsWith("08")==false) 
     cod2=1; 
    if(this.codigoPostal.equalsIgnoreCase("00000")){ 
     cod1=2; 
    } 
    if(otro.codigoPostal.equalsIgnoreCase("00000")){ 
     cod2=2; 
    } 
    return cod1-cod2; 
} 

Есть ли вероятность того, что два файла, которые я возвращающие имеет различный порядок?

У меня изменить мой код, добавив следующие строки:

public int compareTo(Comunicado otro) { 
    int cod1=Integer.parseInt(this.codigoPostal); 
    int cod2=Integer.parseInt(otro.codigoPostal); 

    if(this.codigoPostal.startsWith("28") && otro.codigoPostal.startsWith("28")==false) 
     cod1=0; 
    else if(this.codigoPostal.startsWith("08") && otro.codigoPostal.startsWith("08")==false) 
     cod1=1; 
    if(otro.codigoPostal.startsWith("28") && this.codigoPostal.startsWith("28")==false) 
     cod2=0; 
    else if(otro.codigoPostal.startsWith("08") && this.codigoPostal.startsWith("08")==false) 
     cod2=1; 

    if(this.codigoPostal.equals(otro.codigoPostal)) 
    { 
     if(this.codicoCliente.compareToIgnoreCase(otro.codicoCliente) == 0) 
     { 
      return this.codicoCliente.compareToIgnoreCase(otro.codicoCliente); 
     } 
    } 

    if(this.codigoPostal.equalsIgnoreCase("00000")){ 
     cod1=2; 
    } 
    if(otro.codigoPostal.equalsIgnoreCase("00000")){ 
     cod2=2; 
    } 
    return cod1-cod2; 

} 

этого достаточно, чтобы убедиться, что там не проблемы?

Наконец я решил мою проблему со следующим кодом:

if(this.codigoPostal.startsWith("28") && otro.codigoPostal.startsWith("28")==false) 
     cod1=0; 
    else if(this.codigoPostal.startsWith("08") && otro.codigoPostal.startsWith("08")==false) 
     cod1=1; 
    if(otro.codigoPostal.startsWith("28") && this.codigoPostal.startsWith("28")==false) 
     cod2=0; 
    else if(otro.codigoPostal.startsWith("08") && this.codigoPostal.startsWith("08")==false) 
     cod2=1; 

    if(this.codigoPostal.equalsIgnoreCase("00000")){ 
     cod1=2; 
    } 
    if(otro.codigoPostal.equalsIgnoreCase("00000")){ 
     cod2=2; 
    } 

    if(this.codigoPostal.equals(otro.codigoPostal)) 

    { 
     int i = this.codicoCliente.compareTo(otro.codicoCliente); 
     if (i != 0) return i; 
    } 


    return cod1-cod2; 


} 

ответ

0

Одна вещь (если я не misundstood код) - если две почтовые индексы начинаются с теми же двумя цифрами, то ваш CompareTo говорит, что они имеют тот же порядок. Таким образом, вы можете получить почтовые индексы в двух разных порядках. Для примера 08123 и 08321 может закончиться как:

08123 
08321 

или

08321 
08123 

В идеале, CompareTo не должны быть в состоянии вернуть 0, если вы хотите, чтобы избежать этого. Чтобы проверить, устраняют проблему, попробуйте:

return ((cod1-cod2)==0 ? (this.codigoPostal.compareTo(otro.codigoPostal)) : (cod1-cod2)); 

вместо вашего текущего оператора возврата. ПРИМЕЧАНИЕ. Я не говорю, что это хороший код, я подозреваю, что весь метод можно реорганизовать, но хочу узнать, устраняет ли это проблему.

+0

Привет, спасибо, когда у меня есть в исходном txt некоторые люди с одним и тем же почтовым индексом, мне нужно, чтобы в двух файлах, которые я возвращаю, они должны иметь одинаковый порядок. нужно ли тогда делать другое сравнение, чтобы избежать проблемы? Я попробовал apliccation с большим количеством txt, и когда-либо у меня такой же порядок, даже если слишком много людей с одним и тем же почтовым индексом. В апликации в первую очередь должны появиться люди с почтовым индексом 28 ***. люди с почтовым индексом 08 *** и, наконец, люди с другим почтовым индексом, но которые появляются по логическому порядку номера. – Deckard27

+0

Я отредактировал свой ответ с некоторым пересмотренным кодом. Дайте мне знать, если он решает проблему –

+0

Привет, я думаю, что с вашим кодом я могу найти проблему, потому что я использую cod1 и cod2 как int, и я думаю, что с этим возвратом невозможно использовать cod1 и cod2 как int , – Deckard27