Porównanie stringa z wartością pustą

0

Głupi problem, ale jednak...

Mam takiego ifa:

 if(!(tablica[j+1][wybor].equals(""))) 

Jeśli tablica[j+1][wybor] ma w sobie wartość pustą, czyli "", to nie chce, żeby mi program wchodził do ifa. A jednak wchodzi... Dlaczego?

Jeśli trzeba więcej danych/kodu, to przekleje.

0

Jesteś pewien, że tablica[j+1][wybor] zawiera "", a nie " " lub null?

0

Raczej tak:

System.out.println(j+". " + tablica[j+1][wybor] + " " + najmniejsza + " = " + wynik);
  1. "" "ANGOWICKA" = -31
1

Raczej nie: wartość pusta oznacza, że nie ma nic, u Ciebie jest para cudzysłowów.

if(!(tablica[j+1][wybor].equals("\"\"")))
0

Nie jest pusta bo masz tam: ""

0

Hmm... Rzeczywiście... xD ja głupi. Dzięki :D

Ale... idę dalej... I po n próbach udanych pojawia się znowu problem... Bierze mi 28 czerwca jako najmniejsza, a potem znowu bierze pod uwage cudzysłowie...

  1. "28 CZERWCA 1956 R." "AL.POWSTA�C�W WLKP." = -15
    "28 CZERWCA 1956 R."
  2. "" "28 CZERWCA 1956 R." = -15
    ""
0

Spróbuj opisać problem zrozumiale.

0

Dobra, to trochę pseudokodu:

int indeks = i;  //Zmienna nieistotna tutaj
        najmniejsza = tablica[i][wybor]; //Do najmniejszej wpisuję pierwszy rekord tablicy i z tą zmienną potem porównuję to, co ma w sobie tablica w kolejnych polach
        int wynik=0; //Tutaj wpisuję wartość, którą zwraca compareTo
                
        for(int j=i;j<ileWierszy-1;j++)
        {
        
        if(!(tablica[j+1][wybor].equals("\"\""))) wynik = tablica[j+1][wybor].compareTo(najmniejsza); //Jeśli string jest pusty, to ma go nie brać pod uwagę

        System.out.println(j+". " + tablica[j+1][wybor] + " " + najmniejsza + " = " + wynik); //Pomocniczy tekst, jak to bierze pod uwagę compareTo
        
        if(wynik < 0)   //Jeśli compareTo zwróci wynik ujemny, to znaczy, że coś jest mniejsze od zmiennej Najmniejsza i ta zmienna musi przybrać nową wartość
        {
            najmniejsza = tablica[j+1][wybor];
            System.out.println(najmniejsza);
            indeks = j+1;
        }
 

I teraz tak, to co wyrzuca mi konsola z tekstu pomocniczego System.out.println(j+". " + tablica[j+1][wybor] + " " + najmniejsza + " = " + wynik);

  1. "28 CZERWCA 1956 R." "AL.POWSTA�C�W WLKP." = -15
    "28 CZERWCA 1956 R."
  2. "" "28 CZERWCA 1956 R." = -15
    ""

Czyli: kolejnym elementem tablicy do porównania jest "28 CZERWCA 1956 R.". I to jest porównywane ze zmienną najmniejsza, która ma w sobie wartość "AL.POWSTA�C�W WLKP.". Za znakiem = jest wynik compareTo.
Wynika z tego, że linia 90. zadziałała poprawnie, bo cyfry są mniejsze niż znaki alfanumeryczne w tablicy ascii.
Ale potem w kodzie tak jakby pomijana jest linia " if(!(tablica[j+1][wybor].equals(""""))) wynik = tablica[j+1][wybor].compareTo(najmniejsza); //Jeśli string jest pusty, to ma go nie brać pod uwagę". Porównywany jest znak pusty "" z "28 CZERWCA 1956 R.". Czego wynikiem jest, że znak pusty jest mniejszy...

@Edit:
Ok, już widzę błąd. Po zmianie wartości zmiennej najmniejsza nie zeruje wartości wyniku. Czego efektem jest, że ta linia:

  if(!(tablica[j+1][wybor].equals("\"\""))) wynik = tablica[j+1][wybor].compareTo(najmniejsza); 

rzeczywiście nie jest brana pod uwagę, ale w zmiennej wynik nadal siedzi wartość -15 i zmienna najmniejsza jest podmieniana w

 
if(wynik < 0)   //Jeśli compareTo zwróci wynik ujemny, to znaczy, że coś jest mniejsze od zmiennej Najmniejsza i ta zmienna musi przybrać nową wartość
        {
            najmniejsza = tablica[j+1][wybor];
            System.out.println(najmniejsza);
            indeks = j+1;
        }
0

Wątek do zamknięcia :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1