如题:
根据输入的n,打印n行乘法口诀表。
需要使用二维字符串数组存储乘法口诀表的每一项,比如存放1*1=1
.
为了保证程序中使用了二维数组,需在打印完乘法口诀表后使用Arrays.deepToString
打印二维数组中的内容。
提醒:格式化输出课String.format
或者System.out.printf
。
输出格式说明
- 每行末尾无空格。
- 每一项表达式之间(从第1个表达式的第1个字符算起到下一个表达式的首字符之间),共有包含7个字符。如
2*1=2 2*2=4
从第1个2开始到第二项`2*2=4
首字母之间,总共有7个字符(包含空格,此例中包含2个空格)。
输入样例:
2
5
输出样例:
1*1=1 2*1=2 2*2=4 [[1*1=1], [2*1=2, 2*2=4]] 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 [[1*1=1], [2*1=2, 2*2=4], [3*1=3, 3*2=6, 3*3=9], [4*1=4, 4*2=8, 4*3=12, 4*4=16], [5*1=5, 5*2=10, 5*3=15, 5*4=20, 5*5=25]]
先附上没有使用String和StringBuffer中方法的代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n;
Scanner reader = new Scanner(System.in);
while(reader.hasNextInt()){
n = reader.nextInt();
String s[][] = new String[n][];
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
if(j == 1){
s[i-1] = new String[i];
if(i!=1)
s[i-1][j-1] =i+"*1"+"="+i;
else
s[0][0] = i+"*1"+"="+i;
System.out.printf(i+"*"+1+"="+(i));
}
else if(j == i){
s[i-1][j-1] =i+"*"+j+"="+(i*j);
if(i*(j-1) <10)
System.out.print(" "+i+"*"+j+"="+(i*j));
else
System.out.print(" "+i+"*"+j+"="+(i*j));
}
else{
s[i-1][j-1] =i+"*"+j+"="+(i*j);
if(i*(j-1) <10)
System.out.print(" "+i+"*"+j+"="+(i*j));
else
System.out.print(" "+i+"*"+j+"="+(i*j));
}
}
System.out.println();
}
System.out.println(Arrays.deepToString(s));
}
}
}
下面是使用String/StringBuffer中方法代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
while(reader.hasNextInt()){
int n = reader.nextInt();
String table[][] = new String[n][]; //先给行分配空间
for(int i = 0;i < n;i++){
table[i] = new String[i+1]; //根据每行所含的字符串数不同,动态给列分配空间
for(int j = 0;j <= i;j++){
StringBuffer s = new StringBuffer(); //用StringBuffer来修改字符串效率高
s.append((i+1)+"*"+(j+1)+"="+((i+1) * (j+1)));
//由于第一个输出有结果为1位和结果为2为情况,其后空格数量不同,因此,统一用空格先填充s
s.append(" ");
String sub = s.substring(0, 7); //再取出s中的前7个字符,这样就完成了自动控制后面空格数量
System.out.print(sub);
table[i][j] = sub.trim(); //在放入表前将前导后后导空格去掉
}
System.out.println();
}
System.out.println(Arrays.deepToString(table));
}
}
}
可以看到代码长度和可读性大大增加。
asasfa