Kurs Java Podstawy - rozszerzony

Zmienne

Powoli przejdziemy do czegoś ciekawszego i użytecznego. Pierwszą z takich rzeczy, podstawową i chyba najczęściej wykorzystywaną są zmienne. Pozwalają one na przechowywanie danych różnego typu. Wyróżniamy dwie fazy tworzenia zmiennej:

  • Deklaracja - tutaj określamy typ i nazwę zmiennej
  • Inicjalizacja - nadanie wartości zmiennej

Zobaczmy to na przykładzie.

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

    int liczba; // Deklaracja

    liczba = 5; // Inicjalizacja
  }
}

Zaczynając od początku tworzymy klasę Zmienne (pamiętaj, aby zapisać plik jako Zmienne.java), a w niej tworzymy metodę main(). Dalej następuje zadeklarowanie zmiennej typu int i nazwie liczba(deklaracja), a w kolejnej linii nadajemy jej wartość 5(inicjalizacja). Oczywiście możemy dokonać dwie powyższe instrukcje w jednej linii:

public class Zmienne{
  public static void main(String[] args){
    char znak = 'A';
  }
}

W powyższym przykładzie stworzyliśmy zmienną znakową char o nazwie znak i od razu przypisaliśmy do niej znak A.

Schemat jest następujący:

typ nazwa_zmiennej = wartość;

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

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

    int liczba1 = 5;
    int liczba2 = liczba1;
     System.out.println(liczba1+liczba2);

    double liczba3, liczba4;
    liczba3 = 5.0;
    liczba4 = 3.3;
    System.out.println(liczba3);
    System.out.println(liczba4);
  }
}

Ważne jest to, że operacja liczba2=liczba1, jest jednorazowa. Jeśli zmienimy wartość zmiennej liczba1, to liczba2 nie zmieni swojej wartości.

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

public class Kalkulator{
  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łkowitym a i b, a następnie wyświetlamy wynik tego działania. Zwróć uwagę jak tym razem działa operator +, tekst umieszczony w cudzysłowach 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) stringów.

Przy okazji zmiennych warto także wspomnieć o ich prawie przeciwieństwach, czyli zmiennych finalnych. Różni je słowo kluczowe final umieszczane przed typem zmiennej. Zadeklarowana w ten sposób zmienna może być tylko raz (w dowolnym miejscu) zainicjowana. Późniejsza próba przypisania jej nowej wartości zakończy się błędem i program nawet (na szczęście) nie przejdzie kompilacji.

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

Konwencja nazewnictwa Javy mówi o tym, aby używać przy nich wyłącznie wielkich liter i cyfr, a kolejne tałłowa oddzielać znakami podkreślenia.

Wróćmy do typu String omawianego na poprzedniej lekcji.

Łańcuchy znaków deklarujemy tak jak inne zmienne, lub zmienne finalne, podając najpierw typ String (z dużej litery), a inicjacji możemy dokonać podając jakiś tekst między znakami cudzysłowów.

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ż wspominaliśmy na łańcuchach możemy dokonywać łączenia, czyli konkatenacji przy użyciu operatora +.

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

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

W powyższym przykładzie zapewne zaskoczeniem dla was jest metoda substring(). Po działaniu programu łatwo się domyślić jakie jest jej działanie. Mianowicie 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. W Javie wszystko numeruje się od zera, co czasami bywa kłopotliwe, ale nam to na razie nie będzie przeszkadzało. Tutaj możesz sprawdzić inne metody jakie oferuje klasa String, warto je znać, ponieważ często się je wykorzystuje.

Zadania do samodzielnego wykonania:

1.2. Napisz program, w którym zadeklarujesz kilka zmiennych finalnych, lub zmiennych różnych typów o dowolnych nazwach, a następnie wyświetlisz je w kolejnych liniach tekstu. Skompiluj, lub spróbuj skompilować przykłady podane w tej lekcji i zobacz co się stanie przy próbie nadania po raz drugi wartości jakiejś zmiennej finalnej.

W tym samym programie zadeklaruj cztery zmienne typu String. Trzy z nich zainicjuj jakimiś wyrazami a czwartemu przypisz ciąg znaków utworzony z trzech wcześniejszych zmiennych. Następnie wyświetl czwartą zmienną na ekranie.

Przy użyciu metody substring wyświetl na ekranie dwa pierwsze wyrazy wykorzystując wyłącznie czwartą zmienną typu String.

Rozwiązanie.

<- Poprzednia LekcjaNastępna Lekcja ->

Komentarze

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

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ę :)

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

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 :)

Zbyszek

Zadanie uruchomiło się bez problemu.

chrispos

Zmienne

Po woli przejdziemy do czegoś ciekaws...

Powoli pisze sie razem;)

.......

O co chodzi z tym substring? Nic nie rozumiem.

Witek

A dokładnie czego nie rozumiesz ????

Kamil



.......:

O co chodzi z tym substring? Nic nie rozumiem.

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.

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 :)

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

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?

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?

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

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:\>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 println.
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

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



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.


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
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 ?

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ń

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);
}
}

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

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>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

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 -> HKEY_CURRENT_USER\Console -> 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

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

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