Porównanie stringa z wartością pustą

Odpowiedz Nowy wątek
2015-01-25 18:54
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.

edytowany 1x, ostatnio: Badboss, 2015-01-25 18:55

Pozostało 580 znaków

2015-01-25 18:57
0

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


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2015-01-25 19:05
0

Raczej tak:

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

Pozostało 580 znaków

2015-01-25 19:14

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

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

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans, 2015-01-25 19:14

Pozostało 580 znaków

2015-01-25 19:14
0

Nie jest pusta bo masz tam: ""

Pozostało 580 znaków

2015-01-25 19:36
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
    ""
edytowany 1x, ostatnio: Badboss, 2015-01-25 19:38

Pozostało 580 znaków

2015-01-25 19:43
0

Spróbuj opisać problem zrozumiale.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

2015-01-25 20:44
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;
        }
edytowany 1x, ostatnio: Badboss, 2015-01-25 20:48

Pozostało 580 znaków

2015-01-25 20:52
0

Wątek do zamknięcia :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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