tablica zmiennych typu char edcbabcde

0

Cześć! Muszę utworzyć tablicę zmiennych typu char. Rozmiar musi być większy od 5 i ma być liczbą nieparzystą. Wypełnianie musi nastąpić od środkowego elementu przypisując 'a' a znakiem sąsiadującym ma być 'b' itd. Przykładowy rezultat : edcbabcde

int n;

        System.out.println("Podaj liczbę nieparzystą większą od 5: ");

        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();

        while(n%2==0 || n<=5){
            System.out.println("Zła liczba. Podaj ponownie: ");
            n = sc.nextInt();
        }

        char tab4 [] = new char[n];

int n2;

        n2 = n/2;

Czy ktoś podpowie jak użyć pętli, aby wypełnić tablicę w w/w sposób?

0
  1. Tworzysz zmienną w której trzymasz literę od której zaczynasz
  2. Zaczynasz iterować po tablicy, zaczynając od środka tablicy do końca, przypisując obecną wartość zmiennej i następnie inkrementując ją do nastepnej liczby. Masz połowe roboty załatwione.
  3. W drugiej pętli zaczynasz od 0, i iterujesz aż wypełnisz pozostałe pola, z tym że najpierw dekrementujesz wartość swojej zmiennej, a dopiero później ją przypisujesz.
       char[] tab = new char[size];
       char letterA = 'a';

       for(int i = size/2 + 1; i < size; i++) {
           tab[i] = letterA++;
       }

       for(int i = 0; i < size/2 - 1; i++) {
           tab[i] = --letterA;
       }
0

Można by utworzyć tablicę alfabet: abcdefgh.....z i do Twojej tablicy array, o rozmiarze n nieparzystym, wpisywać od indeksu i = int(n/2) do początku kolejne elementy alfabeta, od indeksu i + 1 do końca , również kolejne elementy alfabet. Przydało by się jeszcze jakieś zabezpieczenie na n, żeby nie przekroczyć zakresu.

0

Powinieneś zczytać size() i podzieić na 2. Zrobić dwa przypadki na parzyste i nieparzyste. I następnie odjąć size() - libcza/2 i przypisać do tego ciąg liter ascii korzystając z tego że litery małe to 97-122.
np.
size() = 9
połowa 4.5 w zaokrągleniu górnym 5
czyli wiesz ze w tab[4] = 97
temp=1
i potem w pętli i=(size()-połowa) i>=0 i-- \size()-połowa = 4
tab[i]=tab[temp+(size()-połowa)]=97+temp
temp++

a dla parzystych ucinasz ostatnia literę.
Chyba dobrze zrozumiałem?

0
Emdzej93 napisał(a):
  1. Tworzysz zmienną w której trzymasz literę od której zaczynasz
  2. Zaczynasz iterować po tablicy, zaczynając od środka tablicy do końca, przypisując obecną wartość zmiennej i następnie inkrementując ją do nastepnej liczby. Masz połowe roboty załatwione.
  3. W drugiej pętli zaczynasz od 0, i iterujesz aż wypełnisz pozostałe pola, z tym że najpierw dekrementujesz wartość swojej zmiennej, a dopiero później ją przypisujesz.
       char[] tab = new char[size];
       char letterA = 'a';

       for(int i = size/2 + 1; i < size; i++) {
           tab[i] = letterA++;
       }

       for(int i = 0; i < size/2 - 1; i++) {
           tab[i] = --letterA;
       }

Wielkie dzięki za naprowadzenie. Jest tylko mały błąd. Po podzieleniu size/2 dodanie i odjęcie 1 jest zbędne. Przykładowo po podzieleniu int 7 w wyniku dostaniemy 3 co w tablicy będzie 4 pozycją (naszym środkiem, gdzie wstawimy 'a').

0
int size;

        System.out.println("Podaj liczbę nieparzystą większą od 5: ");

        Scanner sc = new Scanner(System.in);
        size = sc.nextInt();

        while(size%2==0 || size<=5){
            System.out.println("Zła liczba. Podaj ponownie: ");
            size = sc.nextInt();
        }

        char tab4 [] = new char[size];

        char letterA = 'a';

        for(int i = size/2; i < size; i++) {
            tab4[i] = letterA++;
        }

        for(int i = 0; i < size/2; i++) {
            tab4[i] = --letterA;
        }

        for(int i=0; i<size; i++){
            System.out.print(tab4[i]+" ");
        }

Kompletnie rozwiązane zadanie. Przykładowo dla size = 9 wyświetla się e d c b a b c d e

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