public static void main(String[] args) {
        String r;
        int w;
        int h;
        char c;

        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the text: ");
        r=sc.nextLine();
        System.out.println("Enter the character : ");
        c = sc.next().charAt(0);
        System.out.println("Enter your width: ");
        w=sc.nextInt();
        System.out.println("Enter your height: ");
        h=sc.nextInt();
        System.out.println();
        textbox(c,r,w,h);
    }

    public static void textbox (char c, String r, int w, int h)
    {
        String middle = c + "  " + r + "  " + c;
        for (int i = 0; i < h; i++) {
            for (int j = 0; j < w; j++) {
                if (i == 0 || i == h-2) {
                    System.out.print(c);
                } else if (j ==w-1) {
                    System.out.print(middle);
                } 
            }
            System.out.println();
        }
    }
}

Я должен заставить программу использовать метод, который принимает строку и печатает строку с горизонтальным центром на экране, окруженную рамкой на шесть символов длиннее сообщения.
Ограничьте длину строки, чтобы она поместилась на экране. Он не выполняет то, что я хочу, строки не совпадают, и слово отображается более одного раза (в зависимости от высоты).

0
user4171595 2 Ноя 2014 в 07:06

2 ответа

Лучший ответ

Я надеюсь, что это поможет вам..

Измените этот код в соответствии с вашими требованиями :)

   import java.util.Scanner;

    public class TextBox {
        public static void main(String[] args) {
            String inputString;
            char character;
            Scanner sc = new Scanner(System.in);
            System.out.println("Enter the text: ");
            inputString=sc.nextLine();
            System.out.println("Enter the character : ");
            character = sc.next().charAt(0);
            sc.close();
            drawTextbox(character,inputString);
        }
        public static void drawTextbox (char character, String inputString){
            int width=inputString.length()+6;
            for(int i=0;i<width;i++){
                System.out.print(character);    
            }
            System.out.println();
            for(int i=0;i<width;i++){

                if(i==0||i==width-1){
                    System.out.print(character);
                }
                else if(i>2&&i<width-3){
                    System.out.print(inputString.charAt(i-3));
                }else{
                    System.out.print(" ");
                }
            }
            System.out.println();
            for(int i=0;i<width;i++){
                System.out.print(character);

            }
        }

    }
1
Sagar Pudi 2 Ноя 2014 в 05:34

Модифицированный код. Ваш исходный код не был эффективным (циклы для циклов занимают больше времени), и это намного проще. Разъяснение в кооперативах:

public static void main(String[] args) {
    String ttc; // ttc - short for text to center.
    char ch;

    Scanner sc = new Scanner(System.in);
    System.out.println("Enter the text to center: ");
    ttc=sc.nextLine();
    System.out.println("Enter the border character : ");
    ch = sc.next().charAt(0);
    System.out.println();
    textbox(ttc,ch);
}

public static void textbox (String ttc, char ch)
{
    // Size of word to center in middle.
    int textSize = ttc.length();
    // Total width of box is word size plus 12 plus 2 for border.
    int width = textSize + 14;

    // This is the top and bottom of the box. Uses a char array the
    // size of the width the box and replaces null values (\0) with
    // the character specified for the border.
    String topBottom = new String(new char[width]).replace('\0', ch);
    String middle = ch + "      " + ttc + "      " + ch;

    // Print out box.
    System.out.println(topBottom);
    System.out.println(middle);
    System.out.println(topBottom);
}
0
Alvin Bunk 2 Ноя 2014 в 05:35