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
Misnomer: java.nio.charset.Charset
A charset is not an encoding.
Computer Programming for Humanoids
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
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 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
I already have a long rant on how JavaTpoint sucks. This one is about Durgasoft.
Continue reading “Durgasoft sucks”The keyword static is arguably a bad choice or 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”FizzBuzz in two lines of code.
The only import you need is one for System.out
:
import static java.lang.System.out;
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); }
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.
Why is 0.1+0.2 not equal to 0.3?
The IEEE Standard for Floating-Point Arithmetic is confusing for beginners. Here I try to give an alternative explanation. It’s not my goal to make it easy. It simply isn’t easy. But this might help understand some aspects of floating point arithmetic.
Continue reading “Set-theoretic explanation of IEEE 754”The Y Combinator written in Java 8 with nothing but lambdas.
The Y Combinator allows us to use recursion without actually using the recursion that Java already has. And Java 8 actually doesn’t support recursion in lambdas. So this is one way of solving the problem. The simpler one would be to use a recursive Java method and then use a method reference to it (as in MyMathsFunctions::factorial
). This is to show that Curry was right and we can do it with nothing but lambda expressions. Since Java is strongly typed I also need an interface, which references itself in the type declaration. This is necessary because at some point we need to apply a function to itself.
There are enough wiki and blog pages and articles on this. Even videos. So I won’t explain it in details. It’s nothing new, just written in Java 8.
The full Code is here: https://pastebin.com/M2RmRqdU
private static <T> T apply(UnaryOperator<UnaryOperator<T>> fn, T arg) { return ((Function<UnaryOperator<UnaryOperator<T>>, UnaryOperator<T>>) a -> ((Fn2Op<T>) b -> b.apply(b)) .apply( c -> a.apply( x -> c.apply(c).apply(x) ) )).apply(fn).apply(arg); }
In my blog I write about misconceptions. Encapsulation is something you learn when you study Java and OOP. But it seems that most books fail to truly explain the problems you want to solve with it and those you get by using it. Often it’s just a short chapter or even just a small part about the important concepts of OOP. This is leading to misconceptions and poor understanding of OOP.
(Note: I wrote this before the release of Java 10. Expect that some things are somewhat outdated.)
Continue reading “Encapsulation”The if statement is often translated as “if”, but “if and only if” is what it really means.
To be able to use a language you need to actually understand it. This may seem obvious, but books on Java usually don’t have much on understanding the language. When you learn French you will want to be able to translate from and to French.
Continue reading “Understanding Java”