Mam problem podczas kompilacji przykładów z heliona. Visual Studio Code ma jakiś problem z kodowaniem polskich znaków w kodach źródłowych Javy pobranych z helionu. Zmieniam utf-8 na kodowanie cp1250 kod źródłowy już zamienia na polskie znaki, ale podczas kompilacji wychodzą krzaki.
https://helion.pl/ksiazki/java-przewodnik-dla-poczatkujacych-wydanie-viii-herbert-schildt,javpp8.htm#format/d
podczas kompilacji wychodzą krzaki
Wątpie, bo niby i gdzie? Może podczas URUCHOMIENIA programu konsola w której wyświetlasz wyniki ma inne kodowanie?
Czy VSC jest najlepiej dobranych IDE, gdy mowa o Javie? ...
Warto polecić Apache Netbeans, albo Jetbrains Idea darmowe wydanie.
Pierwszy będzie MSZ lepszy np dla początkującego
Sorki że pisze z drugiego nicka, ale już nie mogłem się zalogować na to samo hasło. Ktoś mi hasło podmienił, zablokował czy jak? Korzystam z rozszerzenia code runner i tak wygląda uruchamianie w nim pliku Java
"java": "cd $dir && /home/user/Java/openjdk-17-ea+8_linux-x64_bin/jdk-17/bin/javac $fileName && /home/user/Java/openjdk-17-ea+8_linux-x64_bin/jdk-17/bin/java $fileNameWithoutExt",
Korzystam z tej wbudowanej konsoli w VSC. Nie chcę zmieniać IDE na inny.
@AntyKtokolwiek czytałem podobny wątek tu na forum i Intellij ma ten sam problem z tymi przykładami z helionu. Nie wiem dlaczego helion dodaje takie przykłady z niepoprawnym kodowaniem. Może ma na to wpływ IDE twórcy tych przykładów? On korzysta z NetBeans, a my próbujemy je uruchomić na Intellij i Visual Studio Code? W Intellij trzeba zmienić każdy plik z krzakami z utf-8 na 1250 i przekonwertować. Dopiero wtedy wyświetla się poprawnie bez krzaków.
Ktoś w Helion wystawił archiwum
java-przewodnik-dla-poczatkujacych-wydanie-viii-herbert-schildt
które się rozpakowuje do folderu
Java. Przewodnik dla pocz•tkuj•cych
Dobry jest, bo ja bez bez szukania na StackOverflow nie wiedziałbym jak w terminalu wpisać takie grube kropki.
Natomiast sam kod i jednak IntelliJ nie ma z tym "problemu"
r01, plik Example3.java
ani też w terminalu Ubuntu nie ma "problemu"
helion $ vi Example3.java
helion $ javac Example3.java
helion $ javac --version
javac 11.0.10
helion $ java Example3
Początkowa wartość zmiennej var: 10
Początkowa wartość zmiennej x: 10.0
var po dzieleniu: 2
x po dzieleniu: 2.5
helion $
Sprawdziłeś tylko pierwszy katalog r01 tu mi wszystko uruchamia się poprawnie, zobacz w innych dłuższych przykładach z r03.
// U�ywa break w zagnie�d�onych p�tlach
class Break3 {
public static void main(String args[]) {
for(int i=0; i<3; i++) {
System.out.println("Licznik zewn�trznej p�tli: " + i);
System.out.print(" Licznik wewn�trznej p�tli: ");
int t = 0;
while(t < 100) {
if(t == 10) break; // Przerywa p�tl� gdy t jest r�wne 10
System.out.print(t + " ");
t++;
}
System.out.println();
}
System.out.println("P�tle zako�czone.");
}
}
}
helion $ vi Break3.java
helion $ javac Break3.java
helion $ java Break3
Licznik zewnętrznej pętli: 0
Licznik wewnętrznej pętli: 0 1 2 3 4 5 6 7 8 9
Licznik zewnętrznej pętli: 1
Licznik wewnętrznej pętli: 0 1 2 3 4 5 6 7 8 9
Licznik zewnętrznej pętli: 2
Licznik wewnętrznej pętli: 0 1 2 3 4 5 6 7 8 9
Pętle zakończone.
helion $ cat /etc/os-release
NAME="Ubuntu"
IntelliJ (aktualna wersja 2020.3)
Font Menlo https://www.cufonfonts.com/font/menlo
Może to być problem z openjdk 17? Teraz pobieram 16 z tej strony.
https://jdk.java.net/16/
@BraVolt a będziesz tak miły i zainstalujesz VSC? Sprawdzisz czy u ciebie pod Ubuntu wyświetla poprawnie?
To samo na Javie 16.
Break3.java:1: error: unmappable character (0xBF) for encoding UTF-8
// U�ywa break w zagnie�d�onych p�tlach
^
Break3.java:1: error: unmappable character (0xBF) for encoding UTF-8
// U�ywa break w zagnie�d�onych p�tlach
^
Break3.java:1: error: unmappable character (0xBF) for encoding UTF-8
// U�ywa break w zagnie�d�onych p�tlach
^
Break3.java:1: error: unmappable character (0xEA) for encoding UTF-8
// U�ywa break w zagnie�d�onych p�tlach
^
Break3.java:6: error: unmappable character (0xEA) for encoding UTF-8
System.out.println("Licznik zewn�trznej p�tli: " + i);
^
Break3.java:6: error: unmappable character (0xEA) for encoding UTF-8
System.out.println("Licznik zewn�trznej p�tli: " + i);
^
Break3.java:7: error: unmappable character (0xEA) for encoding UTF-8
System.out.print(" Licznik wewn�trznej p�tli: ");
^
Break3.java:7: error: unmappable character (0xEA) for encoding UTF-8
System.out.print(" Licznik wewn�trznej p�tli: ");
^
Break3.java:11: error: unmappable character (0xEA) for encoding UTF-8
if(t == 10) break; // Przerywa p�tl� gdy t jest r�wne 10
^
Break3.java:11: error: unmappable character (0xEA) for encoding UTF-8
if(t == 10) break; // Przerywa p�tl� gdy t jest r�wne 10
^
Break3.java:11: error: unmappable character (0xF3) for encoding UTF-8
if(t == 10) break; // Przerywa p�tl� gdy t jest r�wne 10
^
Break3.java:17: error: unmappable character (0xEA) for encoding UTF-8
System.out.println("P�tle zako�czone.");
^
Break3.java:17: error: unmappable character (0xF1) for encoding UTF-8
System.out.println("P�tle zako�czone.");
^
13 errors
Do drugiego katalogu r02 wszystko się poprawnie kompilowało i wyświetlało w konsoli. Więc wtyczka code runner i ścieżki w niej są dobrze ustawione. Problem się pojawił dopiero w katalogu r03, gdy kod źródłowy zawiera te znaki zapytania.
To co podpowiadają na stackoverflow też mi nie pomogło.
https://stackoverflow.com/questions/38528384/how-to-setup-visual-studio-code-to-detect-and-set-the-correct-encoding-on-file-o
@zenoo2:
Nie używaj javy, która nie jest zakorzeniona na rynku.
Nawet jeśli sama w sobie przechodzi testy, w połączeniu z większymi zewnętrznymi bibliotekami efekt jest trudny do określenia.
LTS jest 11, względnie najnowsza względnie zaakaptowana 15.
Java 17 Early Access
docker pull openjdk:17-slim
docker run -it --rm openjdk:17-slim bash
root@e1932095c31d:/home# javac --version
javac 17-ea
java --version
openjdk 17-ea 2021-09-14
OpenJDK Runtime Environment (build 17-ea+9-653)
OpenJDK 64-Bit Server VM (build 17-ea+9-653, mixed mode, sharing)
mkdir -p /home/helion
cd /home/helion
apt-get update
apt-get install -y vim
vi Break3.java
javac Break3.java
root@e1932095c31d:/home/helion# java Break3
Licznik zewnętrznej pętli: 0
Licznik wewnętrznej pętli: 0 1 2 3 4 5 6 7 8 9
Licznik zewnętrznej pętli: 1
Licznik wewnętrznej pętli: 0 1 2 3 4 5 6 7 8 9
Licznik zewnętrznej pętli: 2
Licznik wewnętrznej pętli: 0 1 2 3 4 5 6 7 8 9
Pętle zakończone.
cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
whereis java
java: /usr/local/openjdk-17/bin/java