我正在努力解决液晶显示器挑战。但是在UVa在线判断中我超出了时间限制,所以这意味着我做的方式还不够好。
有人可以建议我如何改进我的代码吗?我正在粘贴代码(它是使用西班牙语变量名称键入的,所以我在这里给你翻译所以你可以按照线程)。
总结我使用的解决方法:我将所有的绘画过程分为五个部分(上半部分,上半部分,一半,下半部分和下半部分),这些部分位于开关盒内,每个部分内部都有一个for循环处理要显示为字符串的数字,我每次都得到每个数字(charAt(n)
),并根据该部分中数字的特征,每次都在另一个for循环的帮助下进行绘画。 / p>
例如在上半部分,除了一个和四个之外的所有数字都是这样绘制的:“----....-”
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
public class Main{
public static void main (String[] args){
Scanner sc= new Scanner(System.in);
int tam=sc.nextInt();//this is the size
String num=sc.next();//this is the number to be displayed
while(tam!=0){
dibujar(tam, num);
tam=sc.nextInt();
num=sc.next();
}
}
public static void dibujar(int tam, String num){//this method makes all the drawing
int ancho=tam+2;//s+2 columns
int largo=2*tam+3;//2s+3 rows
int cont=0;
String numAct="";
String parte="";
String partes[]={"sup", "medSup", "med", "medInf", "inf"};
while(cont!=5){
parte=partes[cont];
cont++;
switch(parte){
case("sup"):
for(int i=0; i<num.length();i++){
numAct=num.charAt(i)+"";//gets the next number
if(numAct.equals("0") || numAct.equals("2") || numAct.equals("3") || numAct.equals("5") || numAct.equals("6") || numAct.equals("7") || numAct.equals("8") || numAct.equals("9")){
System.out.print(" ");
for(int j=0; j<ancho-2;j++){
System.out.print("-");
}
System.out.print(" ");
}
else if(numAct.equals("1") || numAct.equals("4")){
for(int j=0; j<ancho;j++){
System.out.print(" ");
}
}System.out.print(" ");
}
System.out.println();
break;
case("medSup"):
for(int k=0;k<(largo-3)/2;k++){
for(int i=0; i<num.length();i++){
numAct=num.charAt(i)+"";
if(numAct.equals("1") || numAct.equals("2") || numAct.equals("3") || numAct.equals("7")){
System.out.print(" ");
for(int j=0; j<ancho-2;j++){
System.out.print(" ");
}
System.out.print("|");
}
else if(numAct.equals("4")){
System.out.print("|");
for(int j=0; j<ancho-2;j++){
System.out.print(" ");
}
System.out.print("|");
}
else if(numAct.equals("5") || numAct.equals("6")){
System.out.print("|");
for(int j=0; j<ancho-1;j++){
System.out.print(" ");
}
}
else if(numAct.equals("8") || numAct.equals("9") || numAct.equals("0")){
System.out.print("|");
for(int j=0; j<ancho-2;j++){
System.out.print(" ");
}
System.out.print("|");
}
System.out.print(" ");
}
System.out.println();
}
break;
case("med"):
for(int i=0; i<num.length();i++){
numAct=num.charAt(i)+"";
if(numAct.equals("1") || numAct.equals("7") || numAct.equals("0")){
for(int j=0; j<ancho;j++){
System.out.print(" ");
}
}
else if(numAct.equals("2") || numAct.equals("3") || numAct.equals("4") || numAct.equals("5") || numAct.equals("6") || numAct.equals("8") || numAct.equals("9")){
System.out.print(" ");
for(int j=0; j<ancho-2;j++){
System.out.print("-");
}
System.out.print(" ");
}
System.out.print(" ");
}
System.out.println();
break;
case("medInf"):
for(int k=0;k<(largo-3)/2;k++){
for(int i=0; i<num.length();i++){
numAct=num.charAt(i)+"";
if(numAct.equals("1") || numAct.equals("3") || numAct.equals("4") || numAct.equals("5") || numAct.equals("7") || numAct.equals("9")){
for(int j=0; j<ancho-1;j++){
System.out.print(" ");
}
System.out.print("|");
}
if(numAct.equals("2")){
System.out.print("|");
for(int j=0; j<ancho-1;j++){
System.out.print(" ");
}
}
if(numAct.equals("6") || numAct.equals("8") || numAct.equals("0")){
System.out.print("|");
for(int j=0; j<ancho-2;j++){
System.out.print(" ");
}
System.out.print("|");
}
System.out.print(" ");
}
System.out.println();
}
break;
case("inf"):
for(int i=0; i<num.length();i++){
numAct=num.charAt(i)+"";
if(numAct.equals("1") || numAct.equals("4") || numAct.equals("7")){
for(int j=0; j<ancho;j++){
System.out.print(" ");
}
}
if(numAct.equals("2") || numAct.equals("3") || numAct.equals("5") || numAct.equals("6") || numAct.equals("8") || numAct.equals("9") || numAct.equals("0")){
System.out.print(" ");
for(int j=0; j<ancho-2;j++){
System.out.print("-");
}
System.out.print(" ");
}
System.out.print(" ");
}
System.out.println();
break;
}
}
}
}