Problem z java

0

Przesiadłem się na chwilę z Pythona na Javę. I mam parę dziwnych problemów.
Moja wersja Javy to 8.

Np w ogóle nie chce działać np taka prosta instrukcja
**(if a > 1) c = 10; **

Tylko gdy w if są zmienne to cała instrukcja przestaje w ogóle działać. gdy zamiast a jest zwykła liczba wszystko jest ok. Chodzi konkretnie o oznaczanie zmiennej c. Nie chce działać.

Podobnie jest z inną rzeczą. Nie chce mi działać skrócone AND czyli &&. Program kompletnie je ignoruje i wykonuje działanie dalej jak nigdy nic.
To są jakieś konwencje których nie znam bo się dopiero uczę czy co ?

0

to nie ma prawa zadziałać
(if a > 1) c = 10;
zmień to na
if (a>1) c = 10;

0

Przepraszam za niedbalstwo ale ciągle nie mogę przyzwyczaić się do Javy ;). Napisałem oczywiście tak jak ty mówiłeś.
https://zapodaj.net/37228aa4f87ec.jpg.html
Nie działa

Podobnie jest z tym && W książce z której się uczę wszystko działa i mam nawet kod oryginalny i dupa. .

0

Książka, z której się uczysz każe Ci zaczynać naukę od pisania w notatniku i kompilacji z wiersza poleceń?
Zmień ksiązkę.

Zainstaluje Eclipse/Intelij i staraj się czytać dokładnie komunikaty błędów.

0
kixe52 napisał(a):

Książka, z której się uczysz każe Ci zaczynać naukę od pisania w notatniku i kompilacji z wiersza poleceń?
Zmień ksiązkę.

Zainstaluje Eclipse/Intelij i staraj się czytać dokładnie komunikaty błędów.

Książka to Java A Beginner's Guide. Wygląda na dobrą. Jeżeli znasz lepszą to słucham propozycji.

0

A zadeklarowales wczesniej zmienna a i c?

Powinno byc na poczatku zwykla deklaracja:

int a = 3;
int c;

A dopiero potem:

if (a>1) {
c = 10;
}

Ze swojej strony rowniez polecam IntellIJ, bardzo przydatny program, jak masz gdzies blad, to program to wykryje i w wiekszym lub mniejszym stopniu wskaze Ci na przyczyne

szrot napisał(a):

Przesiadłem się na chwilę z Pythona na Javę. I mam parę dziwnych problemów.
Moja wersja Javy to 8.

Np w ogóle nie chce działać np taka prosta instrukcja
**(if a > 1) c = 10; **

Tylko gdy w if są zmienne to cała instrukcja przestaje w ogóle działać. gdy zamiast a jest zwykła liczba wszystko jest ok. Chodzi konkretnie o oznaczanie zmiennej c. Nie chce działać.

Podobnie jest z inną rzeczą. Nie chce mi działać skrócone AND czyli &&. Program kompletnie je ignoruje i wykonuje działanie dalej jak nigdy nic.
To są jakieś konwencje których nie znam bo się dopiero uczę czy co ?

0

Dlaczego && nie działa ?
https://zapodaj.net/fa126911b30ea.jpg.html

0

@szrot: Dobrą praktyką jest zadeklarowanie i przypisanie zmiennej PRZED jej użyciem, najlepiej na początku programu/ funkcji - wtedy wiesz, gdzie szukać. Możesz mieć np.

int a = 0;
if (cosTam()) {
    a = 10;
}
System.out.println(a);

Kod się skompiluje a i od razu wiesz czy if się wykonał i zmienił wartość zmiennej.

0

Co to znaczy nie działa według CIebie?

Dostajesz komunikat, że błąd jest w linii 19, błąd mówi o dzieleniu przez 0. Dlaczego tak? Ponieważ używasz % czyli reszta z dzielenia przez.
n % d oznacza, że program musi podzielić n przez d, a w linii 10 u CIebie d jest równe 0.

0

Kurde ta Java jest taka dziwna i pokręcona. To czemu jak zamiast p użyję 1 to wszystko śmiga ?
https://zapodaj.net/3b9ec8d1900b1.jpg.html
@kixe52
Ale Używam przecież && AND. Powinien sprawdzić pierwszą wartość czyli false i nie dzielić.

1
szrot napisał(a):

@kixe52
Ale Używam przecież && AND. Powinien sprawdzić pierwszą wartość czyli false i nie dzielić.

Na pewno? Ja tam widzę & a to jest w ogóle inny operator :)

Co do pierwszego pytania, odpowiedziałem Ci już na pw jak mnie zapytałeś.
Różnica jest taka, ze podając tam p > 0, program jeszcze nie dokonał kompilacji i nie wie, że p jest równe jeden. Skoro tego nie wie, to może być tak, że ten if nie zostanie spełniony i c nie dostanie żadnej wartości. Wtedy przy próbie wyświetlenia c byłby problem.

1

Faktycznie błąd pojawia się linii 19 ;) Facepalm.

1
szrot napisał(a):

Faktycznie błąd pojawia się linii 19 ;) Facepalm.

<sarkazm>Kompilator czasem ma rację, warto czytać komunikaty</sarkazm>.

3

Zmień jeszcze tytuł na: Niedbały Pythonowiec nie może napisać kompilującego się ifa w Javie. Pomocy.

Problemu z Javą tu ja tutaj nie widzę.

0

Dzięki stary. Ty pewnie jak uczyłeś się jakiegoś języka to pod pewnie pisałeś oprogramowania sterujące rakietami dla NASA po dniu nauki i AI ogrywające Kasparova w szachy.

1

@szrot Raczej chodziło o to by że z nowym językiem należy się trochę zaprzyjaźnić, spróbować rozwiązać problem samemu.
Wstawianie posta na forum po 10 minutach walki z if'em w javie nie jest najlepszym pomysłem :P

0

No ale ta Java jest trochę dziwna. Oznaczanie if(1 > 0) c = 10 Działa Ale gdy w tej samej instrukcji jak użyje w if zmiennej zamiast 1 to dupa.W książce z której się uczyłem nie było o tym jeszcze wspomniane. Jak jesteś jakimś hakerem to wyjaśnij mi to proste i intuicyjne zachowanie języka Java.

0

@szrot: jak napiszesz program zgody ze specyfikacją języka, to się skompiluje. Jest to proste i intuicyjne. Nie ma za co.

https://www.hackerrank.com/domains/java i jedziesz z zadaniami (ewentualnie inny podobny serwis) albo jedziesz ze specyfikacją na początek.

0

Tylko te specyfikacje języka mogą być dziwne i nieoczywiste. No ale dobra postaram was się nie dręczyć. takimi banalnymi problemami.

1

@szrot: Tu nie ma co obrażać się na cały świat.Koledzy faktycznie mają rację, chociaż nie do końca umieją się wysłowić.
Jeszcze raz:

int a = 5;
int c = 0;
if (a > 0) c = 10;

Czy chodzi dokładnie o taki kod?

1
szrot napisał(a):

No ale ta Java jest trochę dziwna. Oznaczanie if(1 > 0) c = 10 Działa Ale gdy w tej samej instrukcji jak użyje w if zmiennej zamiast 1 to dupa.W książce z której się uczyłem nie było o tym jeszcze wspomniane. Jak jesteś jakimś hakerem to wyjaśnij mi to proste i intuicyjne zachowanie języka Java.

Nie programuje w javie wcale, ale:

  1. Odpaliłem Twój problem:
import java.lang.Math; // headers MUST be above the first class

// one class needs to have a main() method
public class HelloWorld
{
  // arguments are passed using the text field below this editor
  public static void main(String[] args)
  {
	int b,c;
	int a = 1;
    if(a > 0) {  c = 10; }
    System.out.print(c);
  }
}
  1. Rzuca errorem: error: variable c might not have been initialized
  2. Wklejam go w googla i klikam pierwszy link: https://stackoverflow.com/questions/2448843/variable-might-not-have-been-initialized-error
  3. Dowiaduje się że jest zabezpieczenie typu "jesli if będzie nie prawdziwy to będziesz probował wyświetlić zmienną c która nie jest zainicjalizowana!"
  4. zmieniam linikę int b, c na linijkę int b,c=0 i zaczyna działać
0

Ale to czemu jak zmienię a w if na np 1 to wszystko działa.. zmienna c jest normalnie oznaczana.

0
szrot napisał(a):

Ale to czemu jak zmienię a w if na np 1 to wszystko działa.. zmienna c jest normalnie oznaczania.

Bo wyrażenie '' a> 0" w zależności od a może być prawdziwe lub fałszywe, a " 1>0" jest zawsze prawdziwe.
if (a > 0 ) mozemy wejsc do if'a i zainicjalizowac zmienną c lub też nie wejść i c będzie niezainicjalizowane
if ( 1>0) jest zawsze prawdziwe więc nie mamy się co martwić że c będzie nie zainicjalizowane

0

Dzięki ale nie mówicie ,że to są proste banalne rzeczy ,i co niektórzy niech powstrzymają z drwinami ;)

Ale żeby instrukcja if w ogóle musiała być zainicjowana to a musi przecież uprzednio mieć już jakoś wartość .Więc i tak jest to trochę dziwne. Dobra ale mniejsza z tym.

0
szrot napisał(a):

Dzięki ale nie mówicie ,że to są proste banalne rzeczy ,i co nie którzy niech powstrzymają z drwinami ;)

Ale żeby instrukcja if w ogóle musiała być zainicjowana to a musi przecież uprzednio mieć już jakoś wartość .Więc i tak jest to trochę dziwne. Dobra ale mniejsza z tym.

Nie musi być, cały problem jest w tym że chcesz używać zmiennej która jest inicjalizowana w if'ie którego ciało może się niewykonać.
Wydaje mi się że to jest bardzo logiczne
To tak jakbys chciał w pythonie napisać coś takiego

a,b,c
if a > 0:
   c = 0

print(c)
0

W pythonie nie miałeś z tym problemu bo wszystkie zmienne muszą wskazywać na jakąś wartość(obiekt) :P
A w javie zmienne lokalne nie muszą mieć wartości, ale też nie mają żadnej default'owej.

1

Nie bardzo czaję , będę musiał posiedzieć w temacie.

0

NIe karmcie trolla. Odpisałem mu 2 razy o co chodzi z tym ifem, czemu dla p > 0 nie działa, a dla 1 > 0 działa, a on dalej pyta o to samo. Szkoda mojego i waszego czasu.

0

O lol zaraz troll. Czyli zmienne w instrukcji if jest lokalna ? A nie globalna ? W Pythonie każda zmienna w w bloku if jest globalna. Będę musiał doczytać. Nie bądźcie takimi bucami , dopiero się uczę ;) .

0

W Pythonie jest inaczej niż w Javie i nie jest tak jak piszesz, nie każda zmienna w bloku if jest globalna.

O zasięgu zmiennych możesz poczytać poniżej:

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