Nowe posty

Autor Wątek: Coś się z typami w javie pochrzaniło  (Przeczytany 16078 razy)

rapio1

  • Gość
Coś się z typami w javie pochrzaniło
« dnia: 2006-08-03, 16:45:08 »
Witam:

Jestem nowym urzytkownikiem Ubuntu 6,06, tzn kupiłem gazetkę wraz z płytką CD i postanowiłem sprubować swoich sił w LINUKSIE.
Po kilku nieudanych instalkach na moim archaicznym sprzęcie (Proc 433Mhz, HDD 4,3GB, 192MB SDRAM,) doszedłem do wniosku że mam nieco mało pojemny dysk jak na całe Ubuntu  (Wolne działanie i przycinanie systemu po skończonej instalacji) więc postanowiłem zainstalować mniej wymagające środowisko graficzne  \\"Xubuntu-desktop\\".
Oczywiście doinstalowanie do juz istniejącego Ubuntu zmiejszyło tylko ilość wolnego miejsca na dysku co w efekcie doprowadziło do zawieszenia się systemu.
Nie rezygnuje tak szybko, gdzieś na forum znalazłem opis serwerowej instalacji Drapera z dodaniem w.w Xubuntu-desktop i heja, kolejne dwie nieudane instalacje (wprawdzie za drugim razem Xubuntu zainstalowało się tak jak trzeba ale jego wygląd i działanie pozostawiały wiele do życzenia).
 W końcu trafiłem na Opis instalacji Xubuntu w wersji minimum, tzw metodą Sylwestra opisaną w:

http://forum.ubuntu.pl/viewtopic.php?t=3770.

Instalacja serwera jak zwykle przebiegała dość sprawnie, także bez problemu poradziłem sobie z edycją pliku Sources.list w edytorze  \\"nano\\", updatem i upgradem systemu, jednak po dokładnym wpisaniu do terminala komendy :
 
\\"sudo apt-get install x-window-system-core xfce4 synaptic gnome-sudo gdm acpi acpid powermanagement-interface mozilla-firefox\\"

otrzymałem komunikat coś w stylu, \\"niema Xfce4 tylko Xfce4-panel oraz pakiet gnome-sudo nie ma czegoś takiego\\", dopisałem więc ten panel do Xfce4 i usunołem z komendy \\" -sudo\\", dalsza instalacja przebiegała bez problemu tylko na samym końcu dostałem komunikat z czerwoną gwiazdką przed którym pisało że podany katalog domowy użytkownika już istnieje i nie może być zastąpiony przez inny. Następnie komenda \\"sudo reboot\\". Przed zalogowaniem do systemu znów komunikat o nieistnieniu motywu \\"Human coś tam\\", wraz ze ścieżką dostępu do tego pliku. Po odpaleniu systemu przez standardowe okienko logowania stwierdziłem że jest dość szybki, ładny i mały ale zauważyłem że rozwijając liste aplikacji przy nazwie menadżera (Thunar) niema ikony a po naciśnięciu na ten napis nic się nie odpala. Po kilkugodzinnym urzytkowaniu, zwiecha i niemożliwość odpalenia środowiska graficznego.
Obecnie zainstalowałem któryś raz z kolei standardowe Ubuntu 6,06 i zastanawiam się kiedy mi padnie.

Ten sam temat poruszyłem na forum Ubuntu, niestety pogłoski o tym jakie to niby obszerne i przyjazne forum skończyły się na tym że już ponad tydzień echo, zero jakiejkolwiek odpowiedzi, dlatego jestem tu, i proszę o pomoc. Jeżeli ktoś z forumowiczów zainstalował Xubuntu minimum metodą Sylwestra to byłbym wdzięczny za wskazówki co robie nie tak w tej instalacji.

Pozdrawiam i z góry dziękuje

benyo

  • Gość
Coś się z typami w javie pochrzaniło
« Odpowiedź #1 dnia: 2006-08-04, 13:03:36 »
Nie instalowalem nic poprzez apt-get wiec nie powiem ci jak to poprawnie wpisac. ale na moje oko to po prostu nie doinstalowales wszystkich pakietow xfce4 , xfce4-panel to tylko jeden z komponentow tego srodowiska, a jest tych komponentow do jego prawidlowej pracy kilkanascie, m.in. thunar. Sprobuj sciagnac xfce4 ze strony tam jest instalator graficzny ktory instaluje cale srodowisko xfce4 , moze w ten sposob sie uda??

rapio1

  • Gość
Coś się z typami w javie pochrzaniło
« Odpowiedź #2 dnia: 2006-08-05, 08:40:31 »
2006-08-04 13:03:36 benyo napisał:

> Nie instalowalem nic poprzez apt-get wiec nie powiem ci jak to poprawnie wpisac. ale na moje oko
 > to po prostu nie doinstalowales wszystkich pakietow xfce4 , xfce4-panel to tylko jeden z
 > komponentow tego srodowiska, a jest tych komponentow do jego prawidlowej pracy kilkanascie,
 > m.in. thunar. Sprobuj sciagnac xfce4 ze strony tam jest instalator graficzny ktory instaluje
 > cale srodowisko xfce4 , moze w ten sposob sie uda??


To chyba wgetem sciągnąć, później  rozpakować, problem z tym że nigdy w ten sposób nie instalowałem, pozatym trzeba to zrobić w trybie tekstowym??.

Lorenzo

  • Gość
Coś się z typami w javie pochrzaniło
« Odpowiedź #3 dnia: 2006-08-05, 09:11:09 »
Ale kombinujecie :>
Odpal synaptica i wyszukaj paczek związanych z xfce, a nastepnie zainstaluj co ci się spodoba. Analogicznie wywal czego nie potrzebujesz.

rapio1

  • Gość
Coś się z typami w javie pochrzaniło
« Odpowiedź #4 dnia: 2006-08-05, 18:08:28 »
2006-08-05 09:11:09 Lorenzo napisał:

> Ale kombinujecie :>
 > Odpal synaptica i wyszukaj paczek związanych z xfce, a nastepnie zainstaluj co ci się spodoba.
 > Analogicznie wywal czego nie potrzebujesz.

Lorenzo nie zrozumiałeś, mi chodziło o serwerową instalke Xfce4 od podstaw a nie robienie nakładki.

Offline Robert

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2516
    • Zobacz profil
Coś się z typami w javie pochrzaniło
« Odpowiedź #5 dnia: 2006-08-03, 15:00:04 »
Witam

Wziąłem się za naukę javy. No i natrafiłem na problem.

Napisałem sobie taki próbny programik:

class Main
{
public static void main(String args[])
{
int x = 100;
byte y;
double z = 1.125; //przecinek musi być zastapiony kropką!!!
int q;
y = x / 25;
System.out.println("x = " + x + "n" + "y =  " + y + "n" + "z = " + z );
}
}

I przy kompilacji wywala komunikat:

java:9: possible loss of precision
found   : int
required: byte
y = x / 25;
      ^
1 error


Z tego, co widzę, to rzuca się na typy danych, ale przecież wszystkie liczby nie przekraczają zakresów typów. Nie wiem też dlaczego mały ptaszek ^ wskazuje na znak dzielenie.
Zanim popełnisz grafomaństwo: 1 | 2 | 3
Baza RPM Jak szukać informacji

Lorenzo

  • Gość
Coś się z typami w javie pochrzaniło
« Odpowiedź #6 dnia: 2006-08-03, 15:18:54 »
2006-08-03 15:00:04 roca napisał:

> Witam
 >
 > Wziąłem się za naukę javy. No i natrafiłem na problem.
 >
 > Napisałem sobie taki próbny programik:
 >
 > class Main
 > {
 > public static void main(String args[])
 > {
Nie pamietam ju jak to jest w javie, ale sprobuj wykonac rzutowanie typow
y=(byte)x/25 //chyba tak to szlo

chmooreck

  • Gość
Coś się z typami w javie pochrzaniło
« Odpowiedź #7 dnia: 2006-08-03, 17:30:15 »
2006-08-03 15:00:04 roca napisał:


 > Z tego, co widzę, to rzuca się na typy danych, ale przecież wszystkie liczby nie przekraczają
 > zakresów typów.
a ska kompilator ma wiedzieć jakie wartości bedą w tych zmiennych podczas uruchomienia ?

spideros1

  • Gość
Coś się z typami w javie pochrzaniło
« Odpowiedź #8 dnia: 2006-08-03, 20:45:49 »
Stąd, że kompilator stosuje różne optymalizacje. Przykładowo constant folding polega na obliczeniu wartości wyrażeń stałych, które da się policzyć w czasie kompilacji. Powoduje to eliminację niepotrzebnego kodu.

chmooreck

  • Gość
Coś się z typami w javie pochrzaniło
« Odpowiedź #9 dnia: 2006-08-04, 00:59:47 »
2006-08-03 20:45:49 spideros1 napisał:

> Stąd, że kompilator stosuje różne optymalizacje. Przykładowo constant folding polega na
 > obliczeniu wartości wyrażeń stałych, które da się policzyć w czasie kompilacji. Powoduje to
 > eliminację niepotrzebnego kodu.
 >

no oczywiscie... ale x / 25 to nie jest wyrazenie stale... co innego jakbys dal 100 / 25

podejrzewam, ze jakby x bylo 'final int' to tez moglby to sobie zoptymalizowac, ale nie jesli x jest zmienna...

wbt

  • Gość
Coś się z typami w javie pochrzaniło
« Odpowiedź #10 dnia: 2006-08-04, 14:24:23 »
Nic sie nie pochrzaniło. Java jest językiem z tzw. `ścisłą kontrolą typów' co (bardzo ogólnie) oznacza, że podczas kompilacji sprawdzane jest czy nie próbujesz do zmiennych jednego typu przypisać wartości zmiennej innego typu. Właśnie to próbujesz zrobić -- do 8-bitowej zmiennej typy `byte' próbujesz przypisać wartość 32-bitowej zmiennej typu `int', stąd komunikat `possible loss of precision'. Jeśli chcesz zrobić coś takiego musisz zastosować jawną konwersję (to o czym wspomniał Lorenzo).

Co do pytania chumoreck'a o to skąd kompilator zna wartość zmiennych podczas uruchomienia programu. Przecież wcale nie twierdzi, ze zna wartości, ale jest w stanie porównać ich typy i wyszło mu że sie nie zgadzają.

chmooreck

  • Gość
Coś się z typami w javie pochrzaniło
« Odpowiedź #11 dnia: 2006-08-04, 17:40:16 »
dokladnie tak

 > Co do pytania chumoreck'a o to skąd kompilator zna wartość zmiennych podczas uruchomienia
 > programu. Przecież wcale nie twierdzi, ze zna wartości, ale jest w stanie porównać ich typy i
 > wyszło mu że sie nie zgadzają.

to nie bylo pytanie... to bylo pytanie retoryczno - naprowadzajace ;-)

tzn. mialem na mysli, ze my widzimy, ze wartosci sie mieszcza... kompilator wie, jak slusznie napisales, zo moze nastapic niekontrolowane/niechciane obciecie wartości...

Offline Robert

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2516
    • Zobacz profil
Coś się z typami w javie pochrzaniło
« Odpowiedź #12 dnia: 2006-08-04, 20:26:19 »
2006-08-04 14:24:23 wbt napisał:

> Nic sie nie pochrzaniło. Java jest językiem z tzw. `ścisłą kontrolą typów' co (bardzo ogólnie)
 > oznacza, że podczas kompilacji sprawdzane jest czy nie próbujesz do zmiennych jednego typu
 > przypisać wartości zmiennej innego typu. Właśnie to próbujesz zrobić -- do 8-bitowej zmiennej
 > typy `byte' próbujesz przypisać wartość 32-bitowej zmiennej typu `int', stąd komunikat
 > `possible loss of precision'.

No dobrze. Powiedzmy sobie tak. że ja przyjąłem taka mozliwość,  ze się ten program może nie skompiluje, bo myślałem, że widząc dzielenie, czyli działanie często dające wynik nie będący liczbą całkowitą, kompilator może zażądać zmiany typu y na float, albo double. Ale to nic. Teraz bedzie lepsze.

Kompilator w komunikacie stwierdził, ze znalazł int, a potrzebuje byte, no to poszedłem mu na rękę i zrobiłem tak:

byte x = 100, y;

reszta jak poprzednio, a on nadal:
found   : int
required: byte

jednak, kiedy zmieniłem byte na int, wtedy nie miał zastrzeżeń. Kiedy zmieniłem na long, tez było ok, ale kiedy wrzuciłem short problemy znów się pojawiły. W internecie gdzieś znalazłem takie zdanie, ze w javie "kazda liczba jest typu int". Więc do czego służy byte i cała reszta?

----------------------------------------------------------------
sorki za długi post, ale w mojej książce wszystkiego nie ma, a ja mam taką naturę, że muszę rozumieć i już. :-)

Zanim popełnisz grafomaństwo: 1 | 2 | 3
Baza RPM Jak szukać informacji

Offline Robert

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2516
    • Zobacz profil
Coś się z typami w javie pochrzaniło
« Odpowiedź #13 dnia: 2006-08-04, 20:50:49 »
2006-08-04 20:26:19 roca napisał:

 > Kompilator w komunikacie stwierdził, ze znalazł int, a potrzebuje byte, no to poszedłem mu na
 > rękę i zrobiłem tak:
 >
 > byte x = 100, y;
 >
 > reszta jak poprzednio, a on nadal:
 > found   : int
 > required: byte
 
No dobra, skapczyłem, ze jak kompilator znalazł int, to chodziło mu o liczbę, a nie o typ, który wpisałem, ale i tak nie kapuję, czemu byte mu się nie podoba.
Zanim popełnisz grafomaństwo: 1 | 2 | 3
Baza RPM Jak szukać informacji

chmooreck

  • Gość
Coś się z typami w javie pochrzaniło
« Odpowiedź #14 dnia: 2006-08-04, 22:00:42 »
2006-08-04 20:50:49 roca napisał:

 > No dobra, skapczyłem, ze jak kompilator znalazł int, to chodziło mu o liczbę, a nie o typ,
 > który wpisałem, ale i tak nie kapuję, czemu byte mu się nie podoba.

100 to jest dla niego int... i dlatego wynik tego dzielenia jest typu int...

a co do tego, ze ci wypyszczyl:
int zajmuje 4 bajty, wartosci od - duzo do + duzo (google ;-) )
byte zajmuje 1 bajt: wartosci od -127 do + 128

kiedy chciales wpisac wynik wyrazenia typu int (niewazne jaka przyjmuje wartosc w momencie wykonania - potencjalnie moze byc dowolna) do zmiennej byte kompilator wykryl, ze potencjalnie on sie po prostu tam nie zmiesci i zapisana wartosc nie bedzie odpowiadala wynikowi wyrazenia...

Java na takie cos nie pozwala - tzn. jesli koniecznie chcesz tak zrobic, to musisz jawnie zrzutowac wynik wyrazenia na typ docelowy:
byte a = (byte)(100/y);

P.S. Polecam na poczatek, jako lekture do poduszki, "Thinking in Java", Bruce Eckel, w wersji angielskiej dostepna do sciagniecia...