Problem ze zliczaniem danych znaków w stringu

0

Witam,
program w teorii ma sprawdzać ile różnych liczb można stworzyć wykorzystując podaną przez użytkownika liczbę (jej cyfry i długość). Kilka rzeczy muszę dopisać, ale to w sumie nie jest teraz istotne. Istotne jest to, że gdy podamy programowi liczbę z x zerami to on nie zauważy ani jednego (tam pod else, żeby zwiększał zmienną "licznikzer"). Liczba zer jest mi potrzebna, bo w zależności od niej zmienia się trochę sposób liczenia. Kod:

import java.util.Scanner;

public class liczeniecyfr {
    public static void main(String [] args){
        int mnoznik = 2;
        int kombinacje = 1;
        int licznikzer = 0;
        int temp;
        String cyfra;
        System.out.print("Podaj cyfrę: ");
        Scanner odczyt = new Scanner (System.in);
        cyfra = odczyt.nextLine();
        int intIndex = cyfra.indexOf("0");
        int length = cyfra.length();
        if (intIndex == - 1) {
            while(mnoznik <= length){
                kombinacje = kombinacje * mnoznik;
                mnoznik++;
            }
        }
        else{
            for(int i = 0; i < length; i++){
                temp = cyfra.charAt(i);
                if(temp == 0){
                    licznikzer++;
                }
            }
            System.out.println("Liczba posiada " + licznikzer + " zer.");
        }
        System.out.println("Liczba kombinacji to: " + kombinacje);
   }
}

Z góry dzięki za pomoc ;]

tl;dr w przypadku podania liczby z zerami, ich liczba nie jest poprawnie zliczana - dlaczego?

0

Sprawdź zmieniając typ danych 'licznikzer' z int na char

0

Najgłupsze rozwiązanie(bo Twój kod niewiele liczy), ale działające:), wziąć hashset i generując wszystkie permutacje wejściowego ciągu(nie martwimy sie o powtórzenia bo mamy set!:)), dodawać do zbioru tylko te, które nie mają zera na początku i zwrócić # elementów zbioru. Algorytm(złożoności nie podaję, bo nie powala, albo powala, zależy jak na to patrzeć :-D), pseudokod, bardzo podobny do pythona:):

def num_numbers(x):
    s = set() # tworzymy hashset
    for i in permutations(x):
        if i[0] != "0":
            s.add(i)
    return len(s) # len(s) = length(s)

print(num_numbers("123")) # -> 6
print(num_numbers("120")) # -> 4
print(num_numbers("1003")) # -> 6
print(num_numbers("666")) # -> 1

Trzeba Ci tylko znaleźć jakiś iterator z permutacjami stringa w javie, albo umieścić ten kod wewnątrz pętli liczącej permutacje.

0

Po pierwsze, źle porównujesz szukając zer. Powinno być tak:

            for(int i = 0; i < length; i++){
                temp = cyfra.charAt(i);
                if(temp == '0'){
                    licznikzer++;
                }
            }

Po drugie, wprowadzasz użytkownika w błąd. Każesz mu wpisać cyfrę, a oczekujesz liczby.

0

Bardzo dziękuję za pomoc, to co chciałem to działa :)

A co do tego, że np. liczby z tymi samymi cyframi nie były dobrze zliczane - wiem, napisałem o tym w pierwszym poście, że muszę kilka rzeczy dopracować. Tym niemniej ogromne dzięki za poświęcony czas i dodanie sugestii ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1