โจทย์ จงเขียนโปรแกรมรับค่าแบบเว้นวรรคเช่น "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
}
}
}
}
}
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น