แบบฝึกหัด 0001 ระดับ Lv.0

โจทย์ จงเขียนโปรแกรมรับค่าแบบเว้นวรรคเช่น "3 1234567890987654321" 3 คือขนานของจำนวนเส้นปะ ถ้าดูจากรูปจะเห็นขีดสามขีดซึ่งเป็นการแสดงผลของ 1234567890987654321 จากแป้นพิมพ์ให้แสดงผลเป็นดิจิตอลและเมื่อใส่ค่า "0 0" ให้ออกจากโปรแกรม





หากใส่ค่า "4 1234567890" ผลที่ได้คือ จะเห็นจากรูปว่าว่าเส้นแต่ละเส้นมีสี่ขีดและแสดงผลเป็น 1234567890 เหมือนที่เราได้กำหนดเอาไว้



 เฉลย
ต้องทำความเข้าใจก่อน ดังนั้นก่อนอื่นเราต้องทำการกำหนดแถวหรือบรรทัดในการแสดงผล


แถวที่ 1,3,5 จะแสดงผลแบบเส้นแนวนอน [-------------------------]
แถวที่ 2,4 จะแสดงผลแบบเส้นแนวตั้งมี 3 แบบ
          แบบที่ 1 แบบ vertical bar อยู่ทางซ้าย ทำการวนรอบสร้างช่องว่าง      [ |                      ]
          แบบที่ 2 แบบ vertical bar อยู่ทางขวา ทำการวนรอบสร้างช่องว่าง       [                      | ]
          แบบที่ 3 แบบ vertical bar อยู่ทั้งสองข้าง ทำการวนรอบสร้างช่องว่าง  [ |                    | ]
*เราต้องทำการวนรอบอีกครั้งเพื่อสร้างขนานให้กับแถวที่ 2,4 ด้วย
ตัวอย่างเช่นนำแบบที่สามมาวนรอบโดยการเว้นบรรทัด และผลที่ได้

          |           |
          |           |
          |           |

จะได้เส้นเป็นคู่มีช่องว่างเมื่อเราวนสามรอบและเลื่อนลงมาเป็นสามบรรทัด

โค๊ดเฉลย
import java.util.Scanner;
//เรียกการใช้งานคลาสสแกนเนอร์

public class learnjava {
    private static Scanner kb; // กำหนดให้ kb เป็นตัวแปรคลาสสแกนเนอร์

    public static void space(String t1){
    // ใช้ในการแสดงผลของโปรแกรมรูปแบบคือแสดงช่องว่างและไม่มีขอบ
        System.out.print("  ");
        for (int j = 0; j < Integer.parseInt(t1); j++) {
            System.out.print(" ");
            // วนเพื่อสร้างช่องว่างตามขนานที่รับค่าเข้ามา
        }
        System.out.print("  ");
    }
  
    public static void BothVerticalBar(String t1){
    // ใช้ในการแสดงผลของโปรแกรมรูปแบบคือแสดงช่องว่างมีขอบทั้งซ้ายและขวา
        System.out.print(" |");
        for (int j = 0; j < Integer.parseInt(t1); j++) {
            System.out.print(" ");
            // วนเพื่อสร้างช่องว่างตามขนานที่รับค่าเข้ามา
        }
        System.out.print("| ");
    }
  
    public static void LeftVerticalBar(String t1){
    // ใช้ในการแสดงผลของโปรแกรมรูปแบบคือแสดงช่องว่างมีขอบทางด้านซ้าย
        System.out.print(" |");
        for (int j = 0; j < Integer.parseInt(t1); j++) {
            System.out.print(" ");
            // วนเพื่อสร้างช่องว่างตามขนานที่รับค่าเข้ามา
        }
        System.out.print("  ");
    }
  
    public static void RightVerticalBar(String t1){
    // ใช้ในการแสดงผลของโปรแกรมรูปแบบคือแสดงช่องว่างมีขอบทางด้านขวา
        System.out.print("  ");
        for (int j = 0; j < Integer.parseInt(t1); j++) {
            System.out.print(" ");
            // วนเพื่อสร้างช่องว่างตามขนานที่รับค่าเข้ามา
        }
        System.out.print("| ");
    }
  
    public static void hyphen(String t1){
    // ใช้ในการแสดงผลของโปรแกรมรูปแบบคือแสดง Hyphen "-" และไม่มีขอบ
        System.out.print("  ");
        for (int j = 0; j < Integer.parseInt(t1); j++) {
            System.out.print("-");
            // วนเพื่อสร้าง Hyphen "-" ตามขนานที่รับค่าเข้ามา
        }
        System.out.print("  ");
    }

    public static void settext(String t1, String t2) {
        // แถวที่ 1
        for (int i = 0; i < t2.length(); i++) { // วนเท่ากับขนาดของ t2
            char c = t2.charAt(i); // เอาอักษรออกมาใช้ทีละตัวตามลำดับ
            if (c == '1' || c == '4') { // หาก c = 1 หรือ c = 4
                space(t1); // เรียกการใช้งานเมทอด space และส่งค่า t1 ออกไป
            } else {
                hyphen(t1); // เรียกการใช้งานเมทอด hyphen และส่งค่า t1 ออกไป
            }
        }
        System.out.println();

        // แถวที่ 2
        for (int k = 0; k < Integer.parseInt(t1); k++) {
            for (int i = 0; i < t2.length(); i++) {
                char c = t2.charAt(i);
                if (c == '1' || c == '2' || c == '3' || c == '7') {
                    RightVerticalBar(t1);
                    // เรียกการใช้งานเมทอด RightVerticalBar และส่งค่า t1 ออกไป
                } else if (c == '5' || c == '6') {
                    LeftVerticalBar(t1); 
                    // เรียกการใช้งานเมทอด LeftVerticalBar และส่งค่า t1 ออกไป
                } else {
                    BothVerticalBar(t1); 
                     // เรียกการใช้งานเมทอด BothVerticalBar และส่งค่า t1 ออกไป
                }
            }
            System.out.println();
        }

        // แถวที่ 3
        for (int i = 0; i < t2.length(); i++) {
            char c = t2.charAt(i);
            if (c == '1' || c == '7' || c == '0') {
                space(t1);
            } else {
                hyphen(t1);
            }
        }
        System.out.println();

        // แถวที่ 4
        for (int k = 0; k < Integer.parseInt(t1); k++) {
            for (int i = 0; i < t2.length(); i++) {
                char c = t2.charAt(i);
                if (c == '2') {
                    LeftVerticalBar(t1);
                } else if (c == '6' || c == '8' || c == '0') {
                    BothVerticalBar(t1);
                } else {
                    RightVerticalBar(t1);
                }
            }
            System.out.println();
        }

        // แถวที่ 5
        for (int i = 0; i < t2.length(); i++) {
            char c = t2.charAt(i);
            if (c == '1' || c == '4' || c == '7') {
                space(t1);
            } else {
                hyphen(t1);
            }
        }
        System.out.println();
    }

    public static void main(String[] args) { // เมทอดเมน
        kb = new Scanner(System.in); // รับค่าจากหน้าจอ
        while (true) {
            System.out.print("Input only number : ");
            String txt = kb.nextLine(); // รับค่าจจากหน้าจอแบบข้อความ
            if(txt.equals("0 0"))break; // หาก txt = "0 0" ก็จะจบการวนรอบ จบการทำงาน
            int space = txt.indexOf(" "); // ช่องว่าตำแหน่งแรกอยู่ที่ Index ไหน
            if (space > 0) { // ค่าของ Index ต้องมากว่า 0 Index ควรอยู่ตั้งแต่ 1 ขึ้นไป
                String[] text = txt.split(" "); // แยก txt จากช่องว่าแล้วไว้ในอาเรย์
                if (text.length > 2 || text.length <= 0) {
                // ขนาดของอาเรย์ text ต้องมากกว่า 2 หรือน้อยการเท่ากับ 0
                    System.out.println("Error Input try again");
                } else {
                    txt = text[0].concat(text[1]); // กำหนดให้ txt = text[0]+text[1]
                    for (int i = 0; i < txt.length(); i++) {
                        char c = txt.charAt(i);
                        if (!Character.isDigit(c)) { // หากอักษรตัวนั้นๆไม่ใช่ตัวเลข
                            System.out.println("Error Input try again");
                            break; // หยุดการวนรอบกลับไปรับค่าใหม่
                        } else if (i == txt.length() - 1) {
                            settext(text[0], text[1]); // ส่ง text[0], text[1] ออกไปที่เมทอด settext
                        }
                    }
                }
            }
        }
    }
}

ไม่มีความคิดเห็น:

แสดงความคิดเห็น