Zmienne

Przykład użycia

Zapisując kod programu sporo elementów będzie się w nim powtarzało. Załóżmy, że chcemy kilka razy wyświetlić taką samą wartość, ale w nieco innym kontekście.

class Variables {
    public static void main(String[] args) {
        System.out.println("Masz 19 lat.");
        System.out.println("19 lat to piękny wiek.");
        System.out.println("Dodatkowo 19 to liczba pierwsza.");
        System.out.println("Liczba która następuje po 19 to 20");
    }
}

Jak widzisz liczba 19 pojawia się w kodzie wielokrotnie. Jeżeli chcielibyśmy zmienić teraz liczbę 19, np. na 13, to musimy to robić w wielu miejscach kodu. Jest to niewątpliwie mało wygodne, a program ma dopiero 4 linijki.

Tworzenie zmiennych

Do rozwiązania tego problemu możemy wykorzystać zmienne, czyli specjalny element języka, który pozwala przechowywać wartości, a następnie odwoływać się do nich po nazwach. Proces tworzenia zmiennej możemy podzielić na dwa etapy:

  • deklaracja - tutaj określamy typ i nazwę zmiennej,
  • inicjalizacja (nazywana też często inicjacją)- nadanie wartości zmiennej.

Wcześniejszy program możemy więc zapisać w taki sposób:

class Variables {
    public static void main(String[] args) {
        int age;
        age = 19;
        System.out.println("Masz " + age + " lat.");
        System.out.println(age + " lat to piękny wiek.");
        System.out.println("Dodatkowo " + age + " to liczba pierwsza.");
        System.out.println("Liczba która następuje po " + age + " to " + (age+1));
    }
}

W klasie Variables znajduje się metoda main(), od której rozpocznie się działanie programu. Na początku deklarujemy zmienną, czyli określamy jej typ (int) i nazwę (age), a następnie ją inicjujemy, czyli zapamiętujemy w niej wartość 19. Jeżeli w dalszej części programu odwołasz się teraz do zmiennej age po jej nazwie, to w jej miejsce zostanie podstawiona wartość 19.

zmienne_1Deklarację i inicjalizację najczęściej łączy się razem i zapisuje w jednym wierszu:

class Variables {
    public static void main(String[] args) {
        int age = 19;
        System.out.println("Masz " + age + " lat.");
        System.out.println(age + " lat to piękny wiek.");
        System.out.println("Dodatkowo " + age + " to liczba pierwsza.");
        System.out.println("Liczba która następuje po " + age + " to " + (age+1));
    }
}

Działanie programu pozostaje bez zmian, ale jeżeli teraz chcesz zmienić wyświetlaną liczbę/wiek, to zmiany należy dokonać tylko w jednym miejscu w kodzie programu.

Kurs Java

Schemat definiowania zmiennej jest następujący:

typ nazwaZmiennej = wartość;

Możemy deklarować kilka zmiennych obok siebie, a także przypisywać już zainicjowanej zmiennej do innych zmiennych. Wszystko to ukazuje poniższy przykład.

class Variables {
    public static void main(String[] args) {

        int number1 = 5;
        int number2 = number1;
        System.out.println(number1 + number2); //10
        number1 = 10;
        System.out.println(number2); //5

        double number3, number4;
        number3 = 5.0;
        number4 = 3.3;
        System.out.println(number3); //5.0
        System.out.println(number4); //3.3
    }
}

Ważne jest to, że operacja number2=number1 , jest jednorazowa. Oznacza to, że jeżeli do number1 przypisaliśmy w dalszej części programu wartość 10, to nie ma to wpływu na wartość zmiennej number2, która nadal przechowuje wartość 5.

Czas więc napisać coś użytecznego, będzie to program dodający 2 liczby całkowite.

class Calculator {
    public static void main(String[] args) {
        int a = 5;
        int b = 3;
        System.out.println("a+b = " + (a + b));
    }
}

Deklarujemy i nadajemy wartość dwóm zmiennym całkowitoliczbowym a i b , a następnie wyświetlamy wynik tego działania. Zwróć uwagę jak tym razem działa operator +, tekst umieszczony w cudzysłowie jest wyświetlany w normalnej formie natomiast wynik jako suma dwóch liczb. Jest to spowodowane tym, że plus służy do konkatenacji (łączenia) napisów.

Zmienne finalne

Zmienne możesz poprzedzić słowem kluczowym final . Zadeklarowana w ten sposób zmienna może być tylko raz (w dowolnym miejscu) zainicjowana i będzie się nazywała zmienną finalną. Próba przypisania do niej wartości po raz drugi zakończy się błędem i program nawet (na szczęście) nie przejdzie kompilacji.

class Variables {
    public static void main(String[] args) {
        final double liczbaPi=3.14;
        final int finalna2;
        finalna2=3;    // tak można zrobić - pierwsze przypisanie
        liczbaPi=8;     //błąd, zmienna była zainicjowana
    }
}

Łańcuchy znaków (Stringi) deklarujemy tak jak inne zmienne lub zmienne finalne, podając najpierw typ String (pisany dużą literą), a inicjacji możemy dokonać podając jakiś tekst zapisany w cudzysłowie.

Istotną rzeczą jest to, że Stringów nie da się bezpośrednio modyfikować. Na szczęście da się to na kilka sposobów ominąć. Jak już wspomnieliśmy na łańcuchach możemy dokonywać łączenia, czyli konkatenacji przy użyciu operatora +.

class TextVariables {
    public static void main(String[] args) {
        String hello = "Witaj ";
        String world = "Świecie!";
        String powitanie = hello + world; //łączenie dwóch napisów
        System.out.println(powitanie);

        String czesc = powitanie.substring(0, 6) + "uczniu";
        System.out.println(czesc);
    }
}

W powyższym przykładzie zapewne zaskoczeniem dla Ciebie może być metoda substring(). Po działaniu programu łatwo się domyślić jakie jest jej działanie. Mianowicie zwraca ona fragment napisu zaczynając od indeksu podanego jako pierwszy parametr (u nas 0) i kończąc przed indeksem podanym jako drugi parametr pomniejszonym o 1. W Javie prawie wszystko numeruje się od zera, co czasami bywa kłopotliwe, ale jako programista musisz się do tego przyzwyczaić.

Dyskusja i komentarze

Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.

Poniżej znajdziesz archiwalne wpisy z czasów, gdy strona była jeszcze hobbystycznym blogiem.

YeeeZooo

Dla tych co maja problem z metodą substring może się przydać http://download.oracle.com/javase/6/docs/api/java/lang/String.html#substring(int,%20int)

Boholt

Dzięks za link, w końcu zajarzyłem :D

Remik

System.out.println(liczba3) System.out.println(liczba4) w kodzie brakuje średników na końcu

Keymaker

Witam, chcialem cos takiego zrobic jak ponizej ale kompilator zglasza cannot find symbol przy reader.readString(); import TerminalIO.KeyboardReader; public class Stringi_1 { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here KeyboardReader reader = new KeyboardReader(); String hello = "Witaj"; String world = " w programie!"; String powitanie = hello+world; String imie; System.out.println(powitanie); System.out.println("Podaj swoje imię:"); imie = reader.readString(); String czesc = powitanie.substring(0, 5)+ imie; System.out.println(czesc);

Keymaker

Ma byc "readLine" jednak :P

Mateusz

Jestem za tępy na javę :D ale idę na następną lekcję XD

wokm

Nie do końca rozumiem mnogość przykładów i klas o tych samych nazwach,ale pewnie się okaże że to nie ma znaczenia, albo się okaże później dlaczego tak a nie inaczej ;)

Kamil

Ja też tego za bardzo nie rozumiem

Slawek

To jest jeszcze proste, w każdym innym języku wygląda praktycznie identycznie, jedynie syntaktyka się zmienia. Najgorzej sobie wyobrazić co to klasy i obiekty. Jak już się to zrozumie, to rozumie się Javę :)

Genuaa

Czy to wszystko należy umieścić w jednym dokumencie, czy mogłabym poprosić o to jak to ma w całości wyglądać?

Genuaa

i czy nie ma jakiegoś kompilatora który nie zmuszałby do zapisywania dokumentów, tylko od razu pozwalał oglądać skutki pracy, (to moja pierwsza styczność z Javą więc proszę o wyrozumiałość)

Slawek

Generalnie plik zapisany z rozszerzeniem java, który zawiera wyrażenie: class{ } jest w pełni poprawnym i kompletnym zapisem. Wykonywanie programu rozpoczyna się od metody(funkcji) main(). Przymierzam się do opisania eclipsa i innych środowisk, jest tam wbudowana konsola, więc zobaczysz to samo co po skompilowaniu w konsoli windows, czy terminalu linuksa.

Davee

Proponuję używać najnowszej wersji NetBeans'a. Byłem zypełnie zielony z Javy a ten program wyłapuje błędy oraz podpowiada co zrobić.

WBAR

Eclipse tez i lepiej nowym sie uczyc Eclipsa bo jednak EE pisze sie czesciej przy uzyciu Eclipsa (mnogosc wtyczek) a kto opanuje juz Eclipsa i w miarę Mavena to polecam Intellij IDEA

Sławek Ludwiczak

IntelliJ ma tylko jeden minus, którym jest stosunkowo wysoka cena do zastosowań komercyjnych :)

chrispos

Zmienne Po woli przejdziemy do czegoś ciekaws... Powoli pisze sie razem;)

Zbyszek

Zadanie uruchomiło się bez problemu.

.......

O co chodzi z tym substring? Nic nie rozumiem.

Witek

A dokładnie czego nie rozumiesz ????

Kamil

<blockquote> <a href="#comment-580" rel="nofollow"> <strong><em>.......:</em></strong> </a> O co chodzi z tym substring? Nic nie rozumiem. </blockquote> Substring to takie wirtualne nożyczki, które wycinają tekst od znaku podanego najpierw do znaku podanego jako drugi. Czyli substring(0,10) - wytnie znaki zaczynając kolejno od 0 (który jest właściwie pierwszym) do 10. Przykład: String esyfloresy = "trele morele"; substring(3,9) będzie wyglądał tak: "le more". Wycięliśmy od znaku 3 do 9.

Valdy

Właściwie to "le mor", bo spacja też się liczy.

pawelkon

Dzieki Kamil Bardzo obrazowo to wyjasniles bo w sumie to tez mialem z tym problem :( Pozdrawiam Pawel

Szymon

Niestety, ale zarówno mój program jak i rozwiązanie się nie kompiluje.

Paweł

Trzeba rozbijać komendy printout jeśli ma być ujęte dodawanie? int liczba = 5; int liczba2 = liczba; System.out.println("Liczba A: "+liczba+"\nLiczba B: "+liczba2); System.out.println("Suma liczb A i B: "+liczba+liczba2); Daje mi wynik: Liczba A: 5 Liczba B: 5 Suma liczb A i B: 55 A gdy będzie: System.out.println(liczba+liczba2); Liczba A: 5 Liczba B: 5 10 Dałoby się zrobić to w jednej linijce do out.print?

Adam

Napisałeś: System.out.println(„Suma liczb A i B: „+liczba+liczba2); A powinno być: System.out.println("Suma liczb A i B: "+(liczba+liczba2)); Nie dałeś nawiasów, dlatego samiast "10" wychodziło Ci "55". Żeby zmieścić linijki: System.out.println(„Liczba A: „+liczba+”\nLiczba B: „+liczba2); System.out.println(„Suma liczb A i B: „+liczba+liczba2); w jednej możemy napisać: System.out.println("Suma liczb A "+liczba+" i B "+liczba2+" wynosi: "+(liczba+liczba2); Rozumiem, że pierwsza linijka to poinformowanie użytkownika jakie wartości mają liczby A i B, natomiast druga to obliczenia. Przepisz to i sprawdź, czy jest tak, jak chciałeś by było.

Gawa

Wydaje mi się, że w tekście jest błąd: "Jeśli zmienimy wartość zmiennej liczba1, to liczba2 nie zmieni swojej wartości." Jak się zmienia wartość liczby1 to automatycznie się zmienia wartość liczby2.

Slawek

W Javie się nie zmieni. Przypisanie liczba2=liczba1, jest niemal równoznaczna z przypisaniem w stylu liczba2=5.

Gawa

Jak np. przypiszę liczba1=5, liczba2=liczba1( to zmienna liczba2 też będzie się równała 5) to suma wyjdzie 10. Natomiast jeśli zmienię na liczba1=8 to suma wyniesie 16 więc wartość liczby2 też się zmieni.

Slawek

chyba się nie zrozumieliśmy. liczba1=5; liczba2=liczba1; //tutaj zarówno liczba1 i liczba2 = 5. liczba1 = 8; //tutaj liczba1=8, a liczba2 nadal 5. To, że suma się zmieni, gdy na początku będzie inna wartość zmiennej to raczej oczywiste.

Witek

Witam Wyszło Ci np.: 16 bo liczba1 = 8 , skoro liczbe1 o tej wartości przypisałeś do liczby2, czyli teraz liczba2 = 8 i wykonałeś sumowanie to otrzymałeś taki wynik. Wszystko się zgadza

Gawa

Dobra, już kapuję. Przypisujemy nową wartość do liczba1 a nie ją zmieniamy. liczba1=5; // tu nie zmieniamy wartości liczba2=liczba1; liczba1 = 8; //tutaj dopiero przypisujemy nową wartość Małe nieporozumienie językowe :)

Przemek

Hej Nie zaczynaj nazw zmiennych od cyferki, potem te cudzysłowy musiałem wszystkie popoprawiać (masz „wszystkich” - a powinno być "wszystkich") no i masz błąd w printIn - duże I zamiast małego l, jak Ci się to wszystko wyświetli to zobaczysz o czym warto pamiętać - ale to na finiszu eksperymentu:) Pozdrawiam

mati

Witam wszystkich Mam problem po wpisaniu java Test.java pojawia mi sie: error: could not find or load main class java Dodam że do tej pory nie było problemu a literówka jest poprawna i nazwy pliku też Co mam z tym zrobic?

Slawek

Polecam powrót do pierwszej lekcji, czytanie i tak w kółko, aż się nie przeczyta ze zrozumieniem :)

Bodkin

wpisz java Test (bez ".java")

Darchiv

Pokusiłem się o bardziej kompaktowe rozwiązanie: String text1 = "Java ", text2 = "jest...", text3 = " fajna!", text4 = text1 + text2 + text3; System.out.println(text4); System.out.println(text4.substring(0, text1.length()+text2.length())); Myślałem, że pierwsza linijka będzie błędna, a ładnie się skompilowała. Może i użyłem innych zmiennych, ale nie użyłem ich bezpośrednio do wyświetlania. W Pawn'ie na szybkość wykonywania kodu mają znaczenie niepotrzebne białe znaki, np. przy znakach "=". A w Javie? A jak z cudzysłowiami? Czy tak jak w PHP i tutaj można używać apostrofów, żeby przyśpieszyć działanie, jeśli jakoś tekst jest jeszcze procesowany?

Mateuszek

Szczerze to nie rozumiem za bardzo zadania. Troszkę jakoś tam łapie wyrazy w ćwiczeniu ale jak idzie dalej to zdanie to tym bardziej nie zrozumiałe to :P A wydawałoby mi się, że już zaczynam rozumieć.

Mateuszek

Po przeczytaniu powyższego postu nad moim stwierdziłem, że to łatwe :D hehe

cyk

mam problem, napisałem powyższy program ale po wpisaniu w linii komend polecenia javac zwraca mi błędy w kodzie. Nawet jak skopiuję żywcem kod ze strony to też zwraca błędy ;/ "Test.java:3: error: incompatible types String hello = "Witaj "; ^ required: String found: java.lang.String Test.java:4: error: incompatible types String world = "îwiecie!"; ^ required: String found: java.lang.String Test.java:5: error: bad operand types for binary operator '+' String powitanie = hello+world; //│╣czenie Stringˇw" no i nie wiem co robic...

Witek

Witam Miałem kiedyś podobny problem z kodem, który przekopiowałem. Z tego co widzę to musisz po prostu ręcznie poprawić cudzysłów, jak widzisz jest on źle przekopiowany porównaj z przykładem i sam dostrzeżesz błąd o którym mówię. Pozdrawiam.

xyxyxyxy

mam ten sam problem i nie rozumiem różnicy między jednym cudzysłowem,a drugim,HELP?

endy19

czesc chlopaki.Po to tutaj jestesmy zeby pisac sami kody a nie kopiowac i wklejac.Niezle mi idzie czasem sie blokuje na wlasnych bledach ale daje rady jak nalezy.Powodzenia chlopaki:)

Miki

Siemka. Widze ze rozumiesz ta cala metode substring.. czy moglbys mi ja wytlumaczyc jakos ? MIanowicie niewiem z kad i co robia cyfry 0,7 (w twoim przykladzie) oraz za co substring odpowiada ?

zaor23

po pierwsze zaczalem szkolic sie dzis. po drugie lopatologicznie musisz zrozumiec ze w tym jezyku pierwsza liczba to 0 a nie jeden trzecia sprawa substring dziala jak nozyczki i wycina od poczatku wskazania w tym przypadku 0 do konca wskazania czyli jak tu 7. O czyli pierwszy wstawiony znak wartosci czyli J i 7 czyli spacja za wyrazem jestem .policz sobie jakbys chcial przed zmeczony wstawic wyraz "pak Dzi" to cyfry beda (18,25) czaisz z elekka czy mam wytlumaczyc jak wytrzezwieje ?

Mateusz

public class piec { public static void main(String[] args) { int a=5; int b=3; System.out.println("Wynik:\n"+a+"+"+b+"="+(a+b)); } } Tak wygląda dużo ładniej. Pozdro =)

Chasil

Powoli do przodu :)

sakuwbarakushow

Witam, A jest jakaś inna metoda do wyświetlania tekstu w konsoli procz System.out.println() która nie załamuje linii ? Chodzi o to że jak mam jakąś pętle for i w każdej mam System.out.println to wartość mam w nowej linii a nie w tej samej .

Jędrzej

System.out.print

kmiotek

Elegancki kurs. Terminologia zawiła, ale się pokombinuje i wszystko działa jak powinno ;) Oby tak dalej Sławek. Nie zrażaj się niektórymi komentarzami, które z miejsca konotują się z tekstem o studiach informatycznych i większości studentów. :) Pozdrawiam.

Adam

Heh coraz lepiej mi idzie :D! zaczynam coraz to więcej rozumiec :x.. na początku miałem problem z Typami danych ale dałem rade ;x

panstudent

O co chodzi w tych substringach - skąd to 0, skąd te 6? Jakie parametry, jakie indexy? Nie rozumiem czego miałoby to dotyczyć :o

Sławek Ludwiczak

Dokładnie są to indexy Stringa (zakres) jaki chcemy wyciąć.

Patryk

Kurczę... Jak ja chciałbym już pojąć Jave :(

Robert

Witam Raczkuję dopiero w temacie programowania w Javie, ale stwierdzam że kurs jest rewelacyjny. Czasami mam problem z kompilacją , a mianowicie kod programu przepisany w notatniku kropka w kropkę w porównaniu do kodu na stronie kursu nie da się kompilować, natomiast kod skopiowany ze strony działa poprawnie. Co może być powodem takiego problemu? kod który się nie kompiluje: informacja z kompilatora: D:\&gt;javac Test2.java Test2.java:10: cannot find symbol symbol : method pintln(java.lang.String) location: class java.io.PrintStream System.out.pintln(czesc); ^ 1 error Może koledzy podpowiecie co jest nie tak Pozdrawiam Robert

Sławek Ludwiczak

Problemem jest to, że kod wcale nie jest przepisany kropka w kropkę, bo zjadłeś 1 literkę w p<b>r</b>intln. Kolejne długie komentarze wklejaj proszę na forum, thx.

Janusz 1120

Witam chciałem zrobić coś takiego: public class Tekst{ public static void main(String[] args){ String a = "Siemanko "; String b = "Witam "; String c = "wszystkim "; String d = "jestem "; String e = "tutaj "; String f = "nowy!"; String powitanie = a+b+c+d+e+f; // Laczenie Stringojaw System.out.println(powitanie); String czesc = powitanie.substring(0, 9); String czesc2 = powitanie.substring(16, 44); System.out.print(czesc+czesc2); } } Jednak najwyraźniej to nie o to chodzi. A mi chodzi o to żeby wyciąć prawie cały tekst oprócz słowa Witam. Podpowiecie mi co robię źle i jak to naprawić???

Damian

błąd: "java.lang.StringIndexOutOfBoundsException: String ind ex out of range: 44" oznacza, że wyszedłeś poza ostatni index tego stringa (wskazujesz na miejsce poza obszarem jaki zajmuje), czyli źle policzyłeś znaki :). Wywołaj sobie powitanie.length() - funkcja length() zwróci długość Twojego ciągu znaków (int), liczba o 1 mniejsza to numer ostatniego znaku. PS. Polecam nie panikować na widok tych groźnych czerwonych napisów, one często wyjaśniają swoje niespodziewane odwiedziny ;].

Janusz 1120

Dzięki wielkie. Nie zauważyłem :d A leniwy jestem i nawet dobrze nie przeanalizowalem błędu. Będę bardziej się starać . Dzięki :D

Janusz 1120

@up. Oczywiście cudzysłów jest na górze nie wiem dlaczego wkleiło na dole. wyskakuje mi coś takiego po skompilowaniu : Siemanko Witam wszystkim jestem tutaj nowy! Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind ex out of range: 44 at java.lang.String.substring(Unknown Source) at Tekst.main(Tekst.java:12)

Łukasz

Tak zadziała jak chcesz: (jeśli rozumiem o co ci chodzi) public static void main(String[] args){ String a = "Siemanko "; String b = "Witam "; String c = "wszystkich "; String d = "jestem "; String e = "tutaj "; String f = "nowy!"; String powitanie = a+b+c+d+e+f; // Laczenie Stringojaw System.out.println(powitanie); String czesc = powitanie.substring(0, 9); String czesc2 = powitanie.substring(15, 23)+"m " +d+e+f; System.out.print(czesc+czesc2); } }

Mroczny

public class Test { public static void main(String[] agrs) { String buy = "Kipue "; String car = "Samochód!"; String qest = buy + car; System.out.println(qest); String may = "Sprzedam" + qest.substring(5, 15); System.out.println(may); } } //A ja pokombinowałem i odwróciłem :D wyszło co chciałem :D

lolo

Napisałeś: "Istotną rzeczą jest to, że Stringów nie da się bezpośrednio modyfikować. Na szczęście da się to na kilka sposobów ominąć." Nie rozumiem do końca o co chodzi z tym, że nie można bezpośrednio modyfikować Stringów. Gdy piszę: String hello = "Witaj "; hello = hello + "Alex"; System.out.println(hello); To kod się kompiluje i wykonuje się poprawnie. Tak samo gdy napiszę: String hello = "Witaj "; hello = "Alex"; System.out.println(hello);

Sławek Ludwiczak

W linijce hello = hello + „Alex”; tworzysz i przypisujesz do referencji "hello" zupełnie nowy obiekt typu String. Więcej wytłumaczone jest w tej lekcji: http://javastart.pl/klasy/string-stringbuffer-i-stringbuilder/

Me

A po co tyle pisania skoro zamiast String hello = "Witaj" ; hello = "Alex" ; wyświetli się Alex więc można zapisać w postaci public class Stale{ public static void main(String[] args){ String hello = "Witaj" ; hello = "Alex" ; System.out.println(hello); w podobny sposób zauważyłem z poprzednimi przykładami które to często lecz niezawsze musiałem przeinaczać po swojemu żeby wogóle zadziałały w cmd dlaczego tak się dzieje ?

Gabi

String czesc = powitanie.substring(0, 6)+"uczniu"; Moim zdaniem powinno być (0,5), bo szósty znak to już mi łapie S od Świecie. :)

Drelka

@Gabi <blockquote> <a href="#comment-12504" rel="nofollow"> <strong><em>Gabi:</em></strong> </a> String czesc = powitanie.substring(0, 6)+”uczniu”; Moim zdaniem powinno być (0,5), bo szósty znak to już mi łapie S od Świecie. </blockquote> apropo substring: cyt.: "zwraca ona „pod string” zaczynając od indeksu podanego jako pierwszy parametr (u nas 0) i kończąc przed indeksem podanym jako drugi parametr -1." zwroc uwage na koncowke zdania: DRUGI PARAMETR -1 pewnie string hello brzmi u Ciebie "Witaj", a nie "Witaj " (spacja na koncu również jest brana pod uwagę jako znak, który wychwytuje substring) pzdr

Cenny

public class Cenny{ public static void main(String[] args){ String x="Ala "; String y="ma "; String z="kota"; String d="e"; String e=" "; String zdanie=x+y+z; System.out.println(zdanie); System.out.println(z.substring(0, 3)+e+y+x.substring(0, 2)+d); } } Taki mój mały kodzik. Jave zacząłem dosłownie godzinę temu. Miałem zero styczności z językami. Powiedzcie jak wyszło. Wiem ze da się zwyczajnie dać więcej Stringów i wyjdzie to samo. Wolałem przekombinować.

Uczeń

twój kod ma błąd przynajmniej tak mi pokazuje po kompilacji....

Cenny

Mi wszystko działa ;)

Uczeń

mam pytanie czemu nie działa mi ten kod: public class Stałe{ public static void main(String[] args){ final int STALA1; final int STALA2; final int STALA3; STALA1=WITAJ; STALA2=moj; STALA3=nauczycielu; System.out.println(STALA1); System.out.println(STALA2); System.out.println(STALA3); } } czy przez takie nadanie nie czyta znaków tylko liczmy bo jak mam taki kod: public class Stale{ public static void main(String[] args){ final int STALA1; final int STALA2; final int STALA3; STALA1=1; STALA2=2; STALA3=3; System.out.println(STALA1); System.out.println(STALA2); System.out.println(STALA3); } } to działa

snt.banzai

nie możesz do danych typu "int" przypisywać wyrażeń (słów), a jedynie liczby

Uczeń

Oto mój kod jestem uczniem 1 gimnazjum i zaczynam to ogarniać rok temu próbowałem ale zablokowałem się na lekcji o typach danych bo nic nie ogarniałem teraz lepiej mi idzie i z podglądem na twoje kody podane w tej lekcji napisałem ten działający program zachęcam do kompilacji i sprawdzenia. :D public class Zadanie12{ public static void main(String[] args){ String a = "Twoje "; String b = "lekcje "; String c = "rządzą "; String d = a+b+c; System.out.println(d); String e = d.substring(0, 12)+" lubię"; System.out.println(e); } }

jaHolden

Cześć, A czy można dodawać do siebie zmienne różnego typu? int a = 3; double b = 4.0; int c = a+b; Kompilator informuje mnie, że oczekuje int. Czy to kwestia zapisu czy brak możliwości takiego łączenia?

Marcin Kunert

Kompilator protestuje, ponieważ w tym wypadku tracona jest dokładność. Jaka powinna być wartość c, jeśli b = 0.5? Możesz wymusić utratę dokładności poprzez rzutowanie: int c = a+ (int) b; Spowoduje to "odcięcie" wartości dziesiętnej z b.

Mariusz

d:\java_kurs&gt;javac Text.java Text.java:4: possible loss of precision found : double required: float float firstFloat = 30.11; Dlaczego w przypadku gdy chcę wpisać wartość 30.11 do zmiennej float to kompilator wyświetla to jako błąd. O jakiej precyzji jest tu mowa. Jednak jeżeli użyję zmienną double to wszystko gra. Wydaj mi się że zmienna 30.11 mieści się w zakresie zmiennej float

n0ne

daj liczba literkę f i będzie śmigać float firstFloat=30.11f

Marek

Pytanie także o typ float: jak deklarować zmienne typu float ? Chodzi o przypisanie im wartości. Deklaracja dla liczb całkowitych tj. : float liczbaFloat = 10; // zapis jest ok i dokonuje konwersji - zamiany typów natomiast float liczba2Float = 10.0; // kompilator widzi zapis 10.0 jako double i ma problem z precyzją Jak dookreślić precyzję prawej strony przypisania ?

Marek

W sumie sam sobie odpowiem ( dwa posty powyżej jest odpowiedź Marcina Kunerta) przypisanie do float można zrobić przez 'rzutowanie' typu tj. float liczba2Float = (float) 10.0 ; Przyznam, że wygląda to dziwnie. Kompilator powinien 'łyknąć' takie przypisanie wartości: 10.0 do zmiennej typu float . Czy kompilator wszystkie jawnie podane wartości rzeczywiste ( liczby z kropką ) domyślnie traktuje jako double ?

n0ne

ale nie trzeba rzutować przy deklaracji! Wystarczy ze dopieszesz na koncu za liczba f float liczbax=10,123f Dlaczego tak a nie inaczej znajdziesz tutaj: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Tomek 75

mam problem z wyświetlaniem polskich znaków cmd zastępuje jakimiś krzaczkami

Janosch

Spróbuj tak: 1. We właściwościach CMD zmień czcionkę na Lucida console 2. Wpisz w cmd: "chcp", pojawi Ci się aktywna strona kodowa, jeżeli masz 1250, to nie będziesz miał polskich znaków. Zmień ją na 852 poleceniem "chcp 852". Powinno być dobrze, ale to jest jednorazowe. Jeżeli chcesz na stałe musisz dodać do rejestru wpis: regedit -&gt; HKEY_CURRENT_USER\Console -&gt; dodaj wartość DWORD o nazwie CodePage i ustaw wartość dziesiętną 852. Być może przyda się restart.

Tomek 75

Dziwne bo miałem ustawioną wartość 852 ,ale w/g twoich instrukcji zmieniłem w rejestrze na 1250 i teraz mam polskie znaki. Dzięki za pomoc

Tomek

Dlaczego jak wpisuje public class Kalkulator{ public static void main(String[] args){ int a=5; int b=3; System.out.println("a+b = "+(a+b)); } } OTWIERA MI SIĘ NOTATNIK Z TYM PLIKIEM ?

Me

A gdzie to wpisujesz?

xoder

Link nie działa (ten z dodatkowym zastosowaniem stringów).

opalony181

Oki string "int" rozumiem, ale co oznacza "double", Nie został opisany choć go użyłeś. Czy to jest to samo co "Int" tylko, że można przypisać dwie zmienne? A tak w ogóle to zarombiście zrobiony kurs :) Aż chce się człowiekowi uczyć :P

lolo

int jest to typ zmiennych przechowujących wartości całkowite jak: 6, 12, 36 itp. float i double są to zmienne które przechowują wartości typu zmiennoprzecinkowego czyli wartości 1,2; 6,66; 3,14; 3,005. Przy czym zmienne double jest typem podwójnej precyzji co znaczy, że może przechowywać dwa razy więcej liczb po przecinku niż float.

ArkSze

public class Zadanie12 { public static void main(String[] args) { int a = 2; double b = 5.25; final double PI = Math.PI; final int c = 30; String imię = "Jan "; String nazwisko = "Nowak "; String uczelnia = "AON Warszawa "; String dane = imię+nazwisko+uczelnia; //Przy próbie przypisania zmiennym PI i c innych wartości wyskoczyły błędy //double PI = 23; - wyskoczył błąd "Duplicate local variable PI // int c = 25 - wyskoczył błąd "Duplicate local variable c System.out.println("int a = "+(a)); System.out.println("double b"+(b)); System.out.println("stała PI "+(PI)); System.out.println("stała c "+(c)); System.out.println(dane); String rozwiązanie = dane.substring(0, 9); System.out.println(rozwiązanie); } }

ArkSze

To jest moja propozycja rozwiązania zadania 1.2 - pozdrawiam