黑马程序员技术交流社区

标题: [Java]关于day06扩展训练第六题不使用String语句的解决方法 [打印本页]

作者: Halcyon    时间: 2018-3-13 14:49
标题: [Java]关于day06扩展训练第六题不使用String语句的解决方法
对,不使用任何String语句

说白了就是自找麻烦

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

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

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

那么接下来说说思路

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


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

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

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

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

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

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


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


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

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

那……

那就:
[Java] 纯文本查看 复制代码
int length = 0;
for (int i = 1; arr / 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)) {
                                System.out.print(arr1);
                                for (int j = 1; arr1 / j >= 1; j *= 10) {
                                        length++;
                                }
                        }
                }
                for (int i = 0; i < arr2.length; i++) {
                        if (!contains(arr1, arr2)) {
                                System.out.print(arr2);
                                for (int j = 1; arr2 / 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)) {
                                str1 += (arr1 + "");
                        }
                }
                for (int i = 0; i < arr2.length; i++) {
                        if (!contains(arr1, arr2)) {
                                str2 += (arr2 + "");
                        }
                }
                int numLength = (str1 + str2).length();
                if (numLength == 0) {
                        System.out.println("两个数组的所有元素均相同");
                } else {
                        System.out.println("字符串为:" + (str1 + str2) + "\n长度为:" + numLength);
                }
        }


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




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












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

作者: gzgd    时间: 2018-3-21 10:29
厉害了啊
作者: gzgd    时间: 2018-3-21 10:29

作者: gzgd    时间: 2018-3-21 10:29

作者: gzgd    时间: 2018-3-21 10:29

作者: gzgd    时间: 2018-3-21 10:29

作者: gzgd    时间: 2018-3-21 10:29

作者: gzgd    时间: 2018-3-21 10:29

作者: gzgd    时间: 2018-3-21 10:29

作者: gzgd    时间: 2018-3-21 10:29

作者: gzgd    时间: 2018-3-21 10:29

作者: gzgd    时间: 2018-3-21 10:29

作者: zzzz2017    时间: 2018-3-21 10:30
不错不错
作者: Haraella    时间: 2018-3-21 10:30
很厉害啊
作者: Haraella    时间: 2018-3-21 10:30

作者: Haraella    时间: 2018-3-21 10:30

作者: Haraella    时间: 2018-3-21 10:30

作者: Haraella    时间: 2018-3-21 10:30

作者: Haraella    时间: 2018-3-21 10:30

作者: Haraella    时间: 2018-3-21 10:31

作者: Haraella    时间: 2018-3-21 10:31

作者: Haraella    时间: 2018-3-21 10:31

作者: Haraella    时间: 2018-3-21 10:31

作者: Haraella    时间: 2018-3-21 10:31

作者: 白猫    时间: 2018-3-21 10:32
可以可以




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2