Instrukcja if ignoruje warunek

0

Witam, mam problem z warunkiem if, otóż mój programik ciągle wykonuje jedno polecenie niezależnie czy warunek jest spełniony czy nie.
Oto fragment kodu z ifem:

String pesel = read.readLine();
        char x = pesel.charAt(0);
           
               if ( x != 0 ){
                       System.out.printf("Rok 19");
                 } else {
                System.out.printf("Rok 20 ");
               }

Ktoś mi podpowie co robię źle?
Program wykonuje pierwsze polecenie, nawet kiedy x = 0
//dodałem znaczniki - bogdans

0

0 to nie to samo, co '0'.

0

Tam są wszędzie zera, jeżeli tu napisałem "o" to jedynie przez przypadek.

0

Wlasnie te zera sa problemem (a konkretnie jedno zero).
Char to tak naprawde taki jakby unsigned short. Porownujac wartosc char do 0 porownujesz tak na prawde do '\0' czyli null character. '0' (czyli znak 0) to zdaje sie kod ascii 48.
Zeby twoj if zadzialal musisz albo:
if (znak == '0')
albo
if (znak == 48) // nie polecam.

0

Tam są wszędzie zera, jeżeli tu napisałem "o" to jedynie przez przypadek.

No właśnie o to chodzi, że tam są 0. Bierzesz char i przyrównujesz go z zerem. Czy '1' == 1 ?

0
mućka_ napisał(a):

Wlasnie te zera sa problemem (a konkretnie jedno zero).
Char to tak naprawde taki jakby unsigned short. Porownujac wartosc char do 0 porownujesz tak na prawde do '\0' czyli null character. '0' (czyli znak 0) to zdaje sie kod ascii 48.
Zeby twoj if zadzialal musisz albo:
if (znak == '0')
albo
if (znak == 48) // nie polecam.

Wielkie dzięki!
Działa!

0

Żeby nie robić kolejnego tematu mam jeszcze jedno pytanko.
Dlaczego moja pętla ignoruje warunek n > i ?
Wpisuje liczbę 6 a na wyjściu dostaje, że doszedł do 53...

int s=1;
        
            System.out.println("Podaj liczbę naturalna ");
                BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
                   int n = read.read();
                 
                        for(int i=2; n > i; i++){
                           
                             System.out.println(i);
                                s=s+i; 
                          }
0

i < n

0

To samo, liczył aż do 53 chociaż wpisałem 6...

0

metoda read() czyta pojedynczy znak i zwraca w tym wypadku kod ascii. Masz 2 opcje.

  1. Wczytanego inta pomniejszyc o 48 ( jak porownywac znaki itp.) bedzie chyba uzyc metody readLine(), i nastepnie wczytany string sparsowac na int za pomoca n = n - 48 lub n = n - '0'.
  2. Skoro nie masz pojecia o bajtach, charach, ASCII, porownywaniu znakow, metodzie read(), ani nie umiesz czytac dokumentacji, mozesz uzyc metode readLine(). Ona zwraca stringa, ktorego mozesz sparsowac na int za pomoca int n = Integer.parseInt(wczytanaLinia); - pamietaj zeby uzyc try/catch poniewaz wpisane znaki wcale nie musza sie dac sparsowac do inta (np. 'dupa' sie nie da).
0

Sory, tam mi cos sie pomylilo z formatowaniem:
Metoda 1. n = input.read(); n -= 48 wzglednie n -= '0'

0

Korek1032 to do parsowania pliku? to raczej zły sposób

0

Z kawalkow kodu ktore zamiescil autor posta raczej wynika ze to sluzy do wczytywania danych z klawiatury.

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