使用String/StringBuffer中方法简化过程

如题:

根据输入的n,打印n行乘法口诀表。
需要使用二维字符串数组存储乘法口诀表的每一项,比如存放1*1=1.
为了保证程序中使用了二维数组,需在打印完乘法口诀表后使用Arrays.deepToString打印二维数组中的内容。

提醒:格式化输出课String.format或者System.out.printf

输出格式说明

  1. 每行末尾无空格。
  2. 每一项表达式之间(从第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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值