Java – zrcadlová slova

Aktualizováno: 7. 11. 2019, datum vydání: 1. 3. 2011

Příklad:

Existují slova, která se čtou stejně zleva doprava i zprava doleva (např. radar). Napište program, který bude tato slova generovat z jejich první poloviny zadané z klávesnice. 1

Řešení:

Originální řešení od Pavla Herouta.

Moje řešení

Zde je moje řešení daného cvičení naprogramovaného ve vizuálním vývojovém prostředí NetBeans odkaz:

Varianta s využitím funkce reverse() s použitím StringBuffer 1

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplicationradar;

import java.util.Scanner;

/**
 *
 * @author Jitka
 */
public class Radar {

    public static void main(String[] args) {
        System.out.println("Zadej první polovinu slova: "); // vytiskneme na obrazovku uvodni text
        Scanner scanner = new Scanner(System.in); // vytvorime scanner pro cteni vstupu
        String s = scanner.nextLine(); // nacteme vstup od uzivatele - radek
        // ulozime si do druhaPulkaSlova nactene slovo bez posledniho pismene
        StringBuffer druhaPulkaSlova = new StringBuffer(s.substring(0, s.length() - 1));
        druhaPulkaSlova.reverse(); // otocime toto slovo
        s += druhaPulkaSlova; // otocene slovo pridame k puvodnimu slovu
        System.out.println(s); // vytiskneme zrcadlove slovo
    }
}

Varianta s využitím funkce reverse() s použitím StringBuffer 2

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplicationradar;

import java.util.Scanner;

/**
 *
 * @author Jitka
 */
public class Radar {

    public static void main(String[] args) {
        System.out.println("Zadej první polovinu slova: "); // vytiskneme na obrazovku uvodni text
        Scanner scanner = new Scanner(System.in); // vytvorime scanner pro cteni vstupu
        String s = scanner.nextLine(); // nacteme vstup od uzivatele - radek
        StringBuffer sb = new StringBuffer(s); // ulozime si do druhaPulkaSlova nactene slovo
        sb.reverse();  // otocime toto slovo
        sb.deleteCharAt(0); // smazneme prvni pismeno, aby ve vysledku nebylo 2x
        System.out.println(s + sb); // vytiskneme zrcadlove slovo
    }
}

Varianta bez využití funkce reverse() s použitím StringBuffer

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplicationradar;

import java.util.Scanner;

/**
 *
 * @author Jitka
 */
public class Radar {

    public static void main(String[] args) {
        System.out.println("Zadej první polovinu slova: "); // vytiskneme na obrazovku uvodni text
        Scanner scanner = new Scanner(System.in); // vytvorime scanner pro cteni vstupu
        String s = scanner.nextLine(); // nacteme vstup od uzivatele - radek
        StringBuffer sb = new StringBuffer(s); // ulozime ho do buffer stringu
        int puvodniDelkaSlova = sb.length(); // zjistime delku retezce
        sb.setLength(2 * puvodniDelkaSlova - 1); // nastavime delku zhruba na dvojnasobek
        for (int i = 0; i < puvodniDelkaSlova - 1; i++) { // projedeme zacatek retezce
            char ch = sb.charAt(i); // zjistime znak na indexu i
            sb.setCharAt(sb.length() - i - 1, ch); // znak ulozime do volnych pozic odzadu
        }
        System.out.println(sb); // vytiskneme zrcadlove slovo
    }
}

Varianta bez využití funkce reverse() bez použití StringBuffer - využívající pouze obyčejný String

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplicationradar;

import java.util.Scanner;

/**
 *
 * @author Jitka
 */
public class Radar {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        System.out.println("Zadej první polovinu slova: ");  // vytiskneme na obrazovku uvodni text
        Scanner scanner = new Scanner(System.in); // vytvorime scanner pro cteni vstupu
        String s = scanner.nextLine(); // nacteme vstup od uzivatele - radek
        int delkaStringu = s.length(); // zjistime delku retezce
        for (int i = delkaStringu - 2; i >= 0; i--) { // projdeme retezec odzadu, posledni (prvni) pismeno ignorujeme
            s += s.charAt(i); // jednotliva pismena odzadu pridavame za prvni polovinu slova
        }
        System.out.println(s); // vytiskneme zrcadlove slovo
    }
}

1. HEROUT, Pavel. Učebnice jazyka Java rozšířené vydání zahrnuje změny od Java 5. 5. vyd. České Budějovice: KOPP. 2010. ISBN 978-80-7232-398-2, str. 187

Další články