NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Potřeboval bych pomoct nechapu to

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Dima Šípek
Člen
Avatar
Dima Šípek:11.6.2017 15:59

Zdravim možna to bude na prvni pohled lehke a nebudete mit ani zajem mě pomoct ale prosim vas o to . Chtěl bych udělat program že uživatel zada nějakou větu př. Dobrýden . Pak se to da do pole 3x3 takže 1. řadek bude Dob 2.ryd a 3. řadek en . pak se to vezme ze zhora a konečny vypis bude Dreoynbd . neptejte se k čemu to potřebuju ale chtěl bych se zeptat jestli by to šlo určitě jo ale zatim nemam žadnej napad . tak prosim jestli někdo ma chuť vyzkoušejte to a dejte info . určitě to bude dvourozměrne pole to vim .

 
Odpovědět
11.6.2017 15:59
Avatar
Milan Suchomel:11.6.2017 21:13

Alokuješ pole na 3x3. Počkáš na zadaný text. Naplníš jím pole a následně ho vypíšeš po sloupcích.

public static void main(String[] args) throws IOException{
    char[][] pole = new char[3][3];
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Zadej text:");
    String text = br.readLine();
    int i = 0;
    for (int x = 0; x < pole.length; x++) {
        for (int y = 0; y < pole[0].length; y++) {
            if(i<text.length()){
                pole[x][y] = text.charAt(i++);
            }
        }
    }

    for (int x = 0; x < pole[0].length; x++) {
        for (int y = 0; y < pole.length; y++) {
            System.out.print(pole[y][x]);
        }
    }
    System.out.println("");
}
Editováno 11.6.2017 21:16
 
Nahoru Odpovědět
11.6.2017 21:13
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Dima Šípek
Jindřich Máca:12.6.2017 3:22

Řešení od Milana je určitě dobře a splňuje zadání do puntíku, ale mně to prostě nedalo a zkusil jsem napsat trochu jiný postup. :)

import java.util.Scanner;

public class Main {

    // Počet znaků pro parsování pole.
    private static final int LETTERS_NUMBER = 3;

    public static void main(String[] args) {
        // Načtení vstupu.
        final String input = (new Scanner(System.in)).nextLine();

        // Parsování textového řetězce do pole.
        final int size = input.length() / LETTERS_NUMBER + (input.length() % LETTERS_NUMBER > 0 ? 1 : 0);
        final String array[] = new String[size];
        final int lastIndex = size - 1;
        for (int i = 0; i < lastIndex; ++i) array[i] = input.substring(i * LETTERS_NUMBER, (i + 1) * LETTERS_NUMBER);
        array[lastIndex] = input.substring(lastIndex * LETTERS_NUMBER);

        // Mixování pole zpět do textového retězce.
        String output = "";
        for (int i = 0; i < LETTERS_NUMBER; ++i)
            for (String part : array)
                if (part.length() > i) output += part.charAt(i);

        // Vypsání výstupu.
        System.out.println(output);
    }
}
 
Nahoru Odpovědět
12.6.2017 3:22
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:12.6.2017 10:16

A proč, když už si hraješ s vícerozměrným polem, tak nepoužiješ přímo matice? na takovýto příklad je to naprosto krásný příklad jejich využití

Nahoru Odpovědět
12.6.2017 10:16
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.