Gesucht ist ein Javaprogramm, das für einen 4 stelligen Code (Zeichenketten) alle Kombinationen für Groß- und Kleinbuchstaben angibt.
Ich habe ein generisches Programm gebaut, das unabhängig von der Zeichenkettenlänge Deinen Anforderungen genügt.
Zunächst die nötigen Imports:
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
Die Funktion char_array_to_string konvertiert Char-Arrays (in denen im Programm der umzuwandelnde String gespeichert wird) zu Strings.
 public static String char_array_to_string(final Character[] to_convert){
 String result = "";
    for(int pos = 0; pos < to_convert.length; pos++){
       result = result + to_convert[pos];
    }
    return result;
 }
Die Funktion to_binary konvertiert eine Zahl in einen Binary-String. Der zweite Parameter length gibt dabei an, wie lange der Ergebnis-String sein soll (Stichwort 'führende Nullen').
 public static String to_binary(final int num, final int length){
    String result = Integer.toString(num, 2);
    if(result.length() > length){
       return result;
     }
     for(int i = result.length(); i < length; i++){
       result = "0" + result;
     }
   return result;
 }
Schlussendlich das Programm, welches die zuvor erwähnten Funktionen benötigt:
 public static List<String> lower_upper_combs(final String to_convert){
   System.out.println(to_binary(30,5));
   final Character[] word_container = new Character[to_convert.length()];
   final int length = word_container.length;
   final Set<String> duplicate_filter = new HashSet<>();
   final String lower_case_to_convert = to_convert.toLowerCase();
   for(int pos = 0; pos < length; pos++){
     word_container[pos] = lower_case_to_convert.charAt(pos);
   }
   for(int counter = 0; counter < Math.pow(2, length); counter++){
     final String mask = to_binary(counter, length);
     final Character[] converted_word = new Character[length];
     for(int pos = 0; pos < length; pos++){
       if(mask.charAt(pos) == '1'){
         converted_word[pos] = Character.toUpperCase(word_container[pos]);
       } else {
         converted_word[pos] = word_container[pos];
       }
   }
   duplicate_filter.add(char_array_to_string(converted_word));
 }
 return duplicate_filter.stream().collect(Collectors.toList());
}
Für Dein im Anfangspost geschildertes Problem liefert mein Programm folgenden Output:
[abcd, abcD, abCd, abCD, aBcd, aBcD, aBCd, aBCD, ABcd, ABcD, ABCd, ABCD, Abcd, AbcD, AbCd, AbCD]