A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Halcyon

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

对,不使用任何String语句

说白了就是自找麻烦

但是我们day06的时候压根还没学到String语句啊?怎么能用这种超纲的解法呢(手动滑稽.jpg)

所以当时做完之后看到老师给的解法我内心是崩溃的(就是不承认自己StringBuilder)

判断数组内是否已有某个元素、生成随机数组、遍历等等方法相信大家都不用听,就不说了

那么接下来说说思路

这论坛的表情包真不给力分割线这论坛的表情包真不给力


先说两个随机数组数字的拼接。
如果用String语句的话,直接
[Java] 纯文本查看 复制代码
String s ="";
s+=arr[i];
就解决了,只需要根据题目要求在重新赋值前做一个是否重复判断即可。

但我们任性不用String
那么拼接两个数组的方法我想了两个:
第一种是在方法内创建一个新数组,将两个数组“相加”后的元素储存到新数组中,再遍历打印该数组。
这个操作需要加上很多细节,例如,我们无法单纯通过先将一个数组中的某个元素先乘以100再加上另一个数组中的元素来获得拼接后的数字(假设已经判断过数字是否重复)。
这样单纯地“相加”明显是有缺陷的:我们先得判断这两个数组内是否生成了数字100(1-100的随机数),如果有,那就得用100来乘以100再加上另一个数字。这么一来代码就会变得很臃肿。所以我也没用这种方法,这是我现在写的时候刚想到的

其实我当时一共就想了一个方法:判断第一个数组的元素不与第二个数组内任意一个元素重复后
[Java] 纯文本查看 复制代码
System.out.print(arr[i]);

就这么完事了,毕竟这道题只是让我们一共一个无缝拼接后的数字串

然后把第二个数组也用一样的方法一样的输出一遍就完了

应该有五百字了吧分割线应该有五百字了吧


接下来说一下获取字符串长度


既然不用String,那我们就不能用String里length()的方法

也不可能用数组的length,int好像也没有对应的方法

那……

那就:
[Java] 纯文本查看 复制代码
int length = 0;
for (int i = 1; arr[i] / i >= 1; i *= 10) {
	length++;
}

毕竟一个数只有除以比自己小的数才能大于1,那么用1,10,100之类的来判断位数也是可以的
反正我也没想更多了


那么整个拼接和获取长度的方法代码大概是这样的(contains是判断数组中是否已有某元素的方法):
[Java] 纯文本查看 复制代码
	public static int link(int[] arr1, int[] arr2) {
		int length = 0;
		for (int i = 0; i < arr1.length; i++) {
			if (!contains(arr2, arr1[i])) {
				System.out.print(arr1[i]);
				for (int j = 1; arr1[i] / j >= 1; j *= 10) {
					length++;
				}
			}
		}
		for (int i = 0; i < arr2.length; i++) {
			if (!contains(arr1, arr2[i])) {
				System.out.print(arr2[i]);
				for (int j = 1; arr2[i] / j >= 1; j *= 10) {
					length++;
				}
			}
		}
		return length;
	}


(这编辑器不能预览都不知道代码格式变成怎样了)

然后再在主方法里加上输出语句和判断两个数组元素是否完全相同的语句体就结束了

对比使用String的代码:
[Java] 纯文本查看 复制代码
	public static void link(int[] arr1, int[] arr2) {
		String str1 = "";
		String str2 = "";
		for (int i = 0; i < arr1.length; i++) {
			if (!contains(arr2, arr1[i])) {
				str1 += (arr1[i] + "");
			}
		}
		for (int i = 0; i < arr2.length; i++) {
			if (!contains(arr1, arr2[i])) {
				str2 += (arr2[i] + "");
			}
		}
		int numLength = (str1 + str2).length();
		if (numLength == 0) {
			System.out.println("两个数组的所有元素均相同");
		} else {
			System.out.println("字符串为:" + (str1 + str2) + "\n长度为:" + numLength);
		}
	}


人家加上输出语句都还少个几行……




现在都已经第八天结束了,大家肯定也学到了更好的方法(说不定第六天的时候已经有不用String也写得很简练的大神
像我这种自己挑(作)战(死)的事情就不要学了,毕竟挺费时间的
但是偶(经)尔(常)这样搞搞学习才有趣嘛












……才不咧
第八天的作业如果大家觉得麻烦
就去预习下第九天吧……

24 个回复

正序浏览
可以可以
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
很厉害啊
回复 使用道具 举报
不错不错
回复 使用道具 举报
gzgd 高级黑马 2018-3-21 10:29:52
12#
回复 使用道具 举报
gzgd 高级黑马 2018-3-21 10:29:48
11#
回复 使用道具 举报
gzgd 高级黑马 2018-3-21 10:29:43
10#
回复 使用道具 举报
gzgd 高级黑马 2018-3-21 10:29:38
9#
回复 使用道具 举报
gzgd 高级黑马 2018-3-21 10:29:33
8#
回复 使用道具 举报
gzgd 高级黑马 2018-3-21 10:29:29
7#
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马