Pages: [1]   Go Down
Print
Author Topic: La funzione String.substring (int, int) ha un baco logico  (Read 4279 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« on: 12-12-2010, 04:11:15 »

Ecco un'altra perla che farà cadere dal cuore Java a quelli che, dopo aver seguito tutto il corso di Linguaggi di Programmazione l'a.a. scorso, ancora l'anno in cuore.
L'ho scoperta mentre scrivevo questo messaggio boh.

La documentazione ufficiale di String.substring (int beginIndex, int endIndex) ci dice che il metodo substring (int beginIndex, int endIndex) di String, legge dal simbolo con indice (0-based) beginIndex incluso al simbolo con indice (0-based) endIndex escluso.

Eventuali parametri beginIndex e/o endIndex logicamente anomali generano eccezioni.
Secondo javadoc le uniche condizioni affinchè  java.lang.IndexOutOfBoundsException sia lanciata sono:
  • if the beginIndex is negative, or
  • endIndex is larger than the length of this String object, or
  • beginIndex is larger than endIndex
Eppure c'è ancora un caso non contemplato che, secondo logica, dovrebbe far scattare una eccezione:
beginIndex is equal to or larger than the length of this String object
(ho scritto in inglese per conformarmi alla javadoc univ).

Il seguente codice di esempio mostra l'illogicità della istruzione (che viene, invece, puntualmente eseguita):
Code:
       String s = "1234567890";
        String t = s.substring (10, 10);
        System.out.println ("t = <" + t + ">");
Questo codice mostra, come output:
Quote
t = <>
a dimostrazione che, secondo chi ha progettato substring (e fatto scrivere di conseguenza la relativa javadoc), è possibile leggere dall'11° carattere (che non esiste) di una stringa che ha solo 10 caratteri, l'importante è che si termini a leggere prima di quel carattere testate !
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #1 on: 12-12-2010, 09:39:57 »

Suvvia non siamo drastici. Ok è stata una vista, ma dubito che quel bug possa permettere il lancio di una shellcode  . è solo brutto a vedersi
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #2 on: 12-12-2010, 14:19:53 »

[...] ancora l'anno in cuore. [...]
ho capito male, o e` lo strafalcione sul verbo avere che penso io?
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
Pandemia000
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 1.714


Γνῶθι Σεαυτόν


« Reply #3 on: 12-12-2010, 15:25:13 »

[...] ancora l'anno in cuore. [...]
ho capito male, o e` lo strafalcione sul verbo avere che penso io?

beh credo di si, ma il collega reverse non è solito commettere errori di questo genere quindi credo sia  stata una svista (come il bug di java d'altronde )
Logged

La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)
havoc
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 224


« Reply #4 on: 12-12-2010, 16:16:10 »

Quote
public String substring(int beginIndex)
Throws:
IndexOutOfBoundsException - if beginIndex is negative or larger than the length of this String object.
In generale la sottostringa vuota è valida.
Credo la logica sia la stessa secondo la quale l'insieme vuoto è sempre sottoinsieme di qualunque insieme.

Se leggi: http://en.wikipedia.org/wiki/Substring in particolare dove parla di prefissi e suffissi, dice che il caso non vuoto è un'interpretazione restrittiva.

Secondo me non c'è alcun baco "logico", anzi ritengo questa logica abbastanza coerente.
Logged

havoc
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 224


« Reply #5 on: 12-12-2010, 16:18:26 »

Ovviamente chiedo scusa se mi permetto di partecipare in una discussione i cui tutti i partecipanti hanno un numero di post un ordine di grandezza superiore al mio  pray
Logged

ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #6 on: 12-12-2010, 17:05:23 »

[...] ancora l'anno in cuore. [...]
ho capito male, o e` lo strafalcione sul verbo avere che penso io?
Carusi, anzi ca riesco a pinsari di notti boh!!! (guardate a che ora ho postato e ditemi se non mi si può scusare una h mancante , possibilmente non digitata per la fretta  , visto il sonno che acchiappa a tutti a quell'ora)
(ovviamente quando scrivo in siciliano bisogna seguire le regole grammaticali del siciliano pray)

Per havoc:
In effetti questo sistema le cose. La definizione di sottostringa che ti da wikipedia ci induce a trovare i=stringa.length () ed m=0 affinchè si possa verificare la condizione da me considerata.

Forse logicamente, il significato di beginIndex ed endIndex va inteso così:
Per una delle configurazioni che già ci (mi) stavano bene:
Link Immagine

Mentra la situazione estrema che ho descritto va intesa come segue:
Link Immagine

In entrambi i casi, beginIndex indica su quale stanghetta verticale numerata posizionare la prima parete rossa, ed endIndex indica su quale stanghetta verticale numerata posizionare la seconda parete rossa: la sottostringa ottenuta è quella compresa esattamente fra le due pareti rosse !

Mistero risolto !!!
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Fr3d3R!K
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.463



« Reply #7 on: 12-12-2010, 17:08:10 »

In effetti, facendo piu` attenzione, la cosa piu` curiosa e` cosa ti porta nel forum a quell'ora...
Logged

Search Button, CODE Tag, Google & Italian language are your friends! Use Them!
havoc
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 224


« Reply #8 on: 12-12-2010, 17:41:10 »

È l'interpretazione (credo corretta) che avevo dato io. Non mi sono messo a fare i disegnini ma l'immagine nella mia mente era proprio quella di cui hai messo i disegni.
Logged

Pages: [1]   Go Up
Print
Jump to: