For beginners it is difficult to understand what a variable is. They are used in nearly all high-level languages and therefore vital for a good understanding of programming
Continue reading “What is a Variable?”Author: Claude
Bad Defaults in Java
Many misconceptions in Java and similar languages stem from the bad default behaviour. I’ll explain some of them.
Continue reading “Bad Defaults in Java”Is Java easy?
Java isn’t easy. It’s often more complex than needed. But being easy for beginners shouldn’t be a design goal with high priority.
Should a programming language be easy?
I don’t know why so many educational establishments use Java to teach programming. They often start with Java in the first semester. Even the Oracle tutorials expect the reader to already know some basics. Java was designed for programmers who already know C/C++ as seen in this example.
Continue reading “Is Java easy?”The
main
method is similar to themain
function in C and C++; it’s the entry point for your application and will subsequently invoke all the other methods required by your program. [Lesson: A Closer Look at the “Hello World!” Application]
Misconceptions about Dates and Time
Was 1900 a leap year and does every minute have 60 seconds?
In Java we have a new API for Date and Time since Java SE 8. Before that, there was already an API with mutable dates and fore some reason there was a date just for SQL.
Many were not happy with the old API. There was Joda-Time, which later became the basis for JSR-310 and is now found in the package “java.time”.
Misnomer: java.nio.charset.Charset
A charset is not an encoding.
We also have StandardCharsets
. It’s great to have a class with these constants. But UTF-8, UTF-16BE and UTF-16LE are all the same set of charaters: Unicode
Now free of ads
I have my own blog on my own domain now. No more ads.
I have moved the blog from wordpress.com to my own domain. It’s on a managed server on which I run some other sites. So there are no more ads.
The new URL of this blog is:
https://humanoid-readable.claude-martin.ch
This used to be on humanoidreadable.wordpress.com. All old URLs redirect to the new blog as long as I pay them for this service.
I still have to fix some of the posts. Somehow the format of wordpress keeps changing. Now they have “blocks”, which is nice. But I have to fix all posts that contain code (that’s most of them). Until then the code will contain < instead of < and so on. But at least I now have full control and you don’t get any annoying ads.
Claude
Stalin-Sort
Stalin-Sort using divide and conquer.
I just love this idea:
But when you have an input such as [42,1,2,3,4,5,6]
you just get
[42]
instead of [1,2,3,4,5,6]
. You can get a better result if you use divide and conquer. And that is something Stalin would do, don’t you think? So I implemented a recursive solution in Java. It tries all possible results, which is not a single pass and therefore defeats the purpose of having a fast O(n)
algorithm. And my implementation isn’t even in-place. A new data structure has to be created. That’s why I also added an implementation using a linked list, which is what Mathew describes.
The code is on pastebin: https://pastebin.com/rEmvZSiA
Durgasoft sucks
I already have a long rant on how JavaTpoint sucks. This one is about Durgasoft.
Continue reading “Durgasoft sucks”Misnomer: static Keyword
The keyword “static” is arguably a bad choice of naming.
If you look up “static” in a dictionary you find many meanings, none of which explains its use in programming languages. So why is it used in Java, and how is it misunderstood?
Continue reading “Misnomer: static Keyword”Recursive FizzBuzz
FizzBuzz in two lines of code.
The only import you need is one for System.out
:
import static java.lang.System.out;
Simple two-liner:
static void f(int a, int z) {
out.println(a % 15 < 1 ? "FizzBuzz" : a % 3 < 1 ? "Fizz" : a % 5 < 1 ? "Buzz" : a);
if (a < z) f(1 + a, z);
}
Without using the literal “FizzBuzz”:
static void g(int a, int z) {
int x = 0;
if (a % 3 < 1) { out.print("Fizz"); ++x; }
if (a % 5 < 1) { out.print("Buzz"); ++x; }
if (x < 1) out.print(a);
out.println();
if (a < z) g(1 + a, z);
}
Note that I use x<1 instead of x==0 to save a single character.