
门外汉自学入门,刚刚看到 if 分支语句,做完了书上的习题输入三个数并输出最大数的习题后我就在想能不能更难一点,输入四个数试试?然后我就瞬间感觉脑子不够用了,反反复复写了近半个小时写出了下面的代码,测试了一下好像也没有什么问题,但是总感觉怪怪的...
想请教下大家这段代码对不对或者是否有任何需要改进的地方? 我知道肯定有更简单的算法,但是鉴于别的我也看不懂,所以就限定是用判断语句并且不考虑特殊情况。 代码如下:
import java.util.Scanner; public class Largest { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Please enter four numbers: "); int number1 = input.nextInt(); int number2 = input.nextInt(); int number3 = input.nextInt(); int number4 = input.nextInt(); int largest = 0; if (number1 > number2) { if (number1 > number3) { if (number1 > number4) { largest = number1; }else { largest = number4; } }else { if (number3 > number4) { largest = number3; }else { largest = number4; } } }else if (number2 > number3) { if (number2 > number4) { largest = number2; }else { largest = number4; } }else { if (number3 > number4) { largest = number3; }else { largest = number4; } } System.out.println(largest); } } 1 weiyuzhou OP 忘了说,学的是 java 语言。 |
2 takanasi 2017-10-23 22:13:32 +08:00 >>> a=[1,2,3,4] >>> max(a) 4 人生苦短,快用 python |
4 yejinmo 2017-10-23 22:51:34 +08:00 List<int> list= new List<int>(){1, 2, 3, 4}; list.Sort(); int res = list[list.Count - 1]; 人生苦短,试试 C# |
5 mjikop1231 2017-10-23 22:53:18 +08:00 明明 java 也有 sort (不过 java 代码好长啊好长啊好长啊) |
6 shengkunz 2017-10-23 22:53:41 +08:00 via Android 应该先排序,然后在输出最大的那个。 |
7 misaka19000 2017-10-23 22:55:47 +08:00 2 楼有点搞笑了,这种东西用库写谁不会写啊 楼主写的有点麻烦了,简单点的话可以这样: int[] array = new int[]{number1, number2, number3, number4}; for (int i : array) { if (i > largest) largest = i; } System.out.println(largest); |
8 hcnhcn012 2017-10-23 23:00:44 +08:00 via iPhone >>> print(max([i for i in range(1,5)])) 4 |
9 hcnhcn012 2017-10-23 23:01:25 +08:00 via iPhone 人生苦短,快用 python |
10 qiayue PRO 说个你比较能理解的,你先三个数比较,找出最大数,然后跟第四个数比较 |
11 nyanyh 2017-10-23 23:03:57 +08:00 List<Integer> nums = new ArrayList<>(); nums.add(10); nums.add(20); nums.add(45); nums.add(50); nums.add(51); int max = Collections.max(nums); // 51 |
12 nyanyh 2017-10-23 23:05:09 +08:00 算法第四版 Java 实现的一开始就介绍了 Comparable 如何使用,所以我认为使用 Collections 并无任何不妥 |
13 weiyuzhou OP @qiayue 这个靠谱,能理解!也谢谢大家,感觉脑子不够用,稍微难点的就不知道怎么算了,不知道合不合适学编程… |
14 weiyuzhou OP @misaka19000 这个暂时还没学过…谢谢! |
15 AlwaysBehave 2017-10-23 23:15:54 +08:00 |
16 LxExExl 2017-10-23 23:19:30 +08:00 via iPhone 楼上排序和用数组的都是二逼 答非所问 if(a>b && a>c && a>d) largest=a; 同理 写其他三行就行了 |
18 misaka19000 2017-10-23 23:22:13 +08:00 |
20 JamesMackerel 2017-10-23 23:27:10 +08:00 不需要这么复杂啊。 用数组存起来,假设是 num,然后你就: largest = num[0]; for(int t: num){ if(largest > t) largest = t; } 楼上说的那些先排序再取最大的,考虑正常的排序算法,它们的时间复杂度最优也要 nlogn,而这个方法是 n。 |
21 acgnsstech 2017-10-23 23:27:35 +08:00 |
22 thet 2017-10-23 23:33:02 +08:00 可以搜搜排序算法看看 |
23 quickma 2017-10-23 23:48:50 +08:00 你们能不能专心解决问题!!! 其实编码是一个表现思路的过程,一个个比较还是排序还是冒泡啥的,都是思路。 不必担心代码的难易,前期要专注于思维的培养。 |
24 sagaxu 2017-10-23 23:52:07 +08:00 IntStream.range(0, 4).map(i -> input.nextInt()).max().ifPresent(System.out::println); |
25 zjp 2017-10-24 00:00:54 +08:00 via Android 同意 #23 楼 楼上很多方法都能解决问题(用其他语言的过分了啊 。 #7 #2 仅仅求最大值,对所有数字排序明显多余。对简单的问题用不简洁的做法多半是思维跑偏了 |
26 zjp 2017-10-24 00:03:25 +08:00 via Android @zjp 手滑 同意 #23 楼 楼上很多方法都能解决问题(安利其他语言的过分了啊 。 #7 #20 用数组 #11 用集合排序 #24 用 Java8 的流 仅仅求最大值,对所有数字排序明显多余。对简单的问题用不简洁的做法多半是思维跑偏了 |
28 cstome 2017-10-24 00:29:31 +08:00 歪个楼; 我觉得入门写代码的话其实可以从简单的语言,比如 python 甚至 JS 入门,等你熟悉基本语法后,再考虑学习算法。 这样还有个好处,不如当你遇到某些语言没有 sort 时,你也会想着怎么构造个 sort 方法,而不是这样写判断。 前期如果为了实现某个功能,用一堆 if else for 来实现,我觉得是没有意义的。 |
31 weiyuzhou OP 经过大家的提点我已经我已经重写了代码,虽然仍然很笨拙,但是至少代码结构更加清晰了。不管怎么刚刚入门嘛也是一种解决方法。 代码现在是这样子: ```java import java.util.Scanner; public class MaxNumber { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Please enter four numbers: "); int number1 = input.nextInt(); int number2 = input.nextInt(); int number3 = input.nextInt(); int number4 = input.nextInt(); int max = 0; if (number1 > number2 && number1 > number3 && number1 > number4) { max = number1; }else if (number2 > number1 && number2 > number3 && number2 > number4) { max = number2; }else if (number3 > number1 && number3 > number2 && number3 > number4) { max = number3; }else if (number4 > number1 && number4 > number2 && number4 > number3) { max = number4; }else { System.out.print("有特殊情况!"); } System.out.print(max); } } ``` |
32 mario85 2017-10-24 00:52:12 +08:00 via Android 其实哪用那么麻烦,既然你有四个输入变量、一个用来存最大的变量和 if,那直接冒泡出来就好了: /*前面输入 blah blah blah*/ largest=number1; if(number2>largest) largest=number2; if(number3>largest) largest=number3; if(number4>largest) largest=number4; //然后就可以 System.out.print(largest); //了 |
34 mario85 2017-10-24 01:37:39 +08:00 via Android @weiyuzhou 其实楼上的兄弟已经写出来啦,我只是考虑到只学到 if 能看懂,把只用 if 的写法写出来而已 |
35 qwertyegg 2017-10-24 06:12:06 +08:00 如果我写的话我会用 Math.max(Math.max(Math.max(number4, number3), number2), number1); 或者拆一下 Math.max(Math.max(number4, number3), Math.max(number2, number1)); |
36 seognilV2 2017-10-24 08:23:53 +08:00 via Android 只要对比 N-1 次 小的丢弃(也就是大的存到一个变量里向后传递) 就行了 就像是冒泡排序(的一部分) |
38 yongjing 2017-10-24 08:51:18 +08:00 论简洁,自然是我大 JS Math.max(num1,num2,num3,num4) |
39 oaix 2017-10-24 09:09:01 +08:00 java 没有那么复杂 IntStream.of(1, 2, 3, 4).max(); |
41 leemove 2017-10-24 09:16:28 +08:00 人生太长我用 js. ```js Math.max(num1,num2,num3,num4) ``` |
42 vincenth520 2017-10-24 09:18:56 +08:00 $arr = [1,2,3,4]; echo max($arr); 人生苦短,php 也不错 |
43 meepo3927 2017-10-24 09:22:21 +08:00 if 的用法一般用于控制逻辑分支。 找出最大值适合用 for 循环来做。 这个练习就不用深究了噻 |
44 mosliu 2017-10-24 09:25:34 +08:00 定义 public int bigger(int in1,int in2){ return in1>in2?in1:in2 } 然后调用 System.out.println(bigger(bigger(num1,num2),bigger(num3,num4))); |
45 Makcy 2017-10-24 09:29:19 +08:00 [2,1,3].sort[-1] ruby 也不错 :) |
46 zgx030030 2017-10-24 09:37:52 +08:00 就是冒一次泡,循环判断一次。 |
47 denano 2017-10-24 09:51:07 +08:00 lz 你也说了做完了 3 个数里找最大值,想试试从 4 个数里找最大值。那再进一步,是不是就是从 n 个数里找最大值呢?如果沿用你现在的思路,需要写多少行代码,穷举多少种情况才能完成? |
49 lneoi 2017-10-24 10:32:47 +08:00 运行正确就正确了呗。语法还没看完就继续看语法,不碍事。 然后回头再来改成 N 个数找最大值 |
50 fortunezhang 2017-10-24 10:44:17 +08:00 ``` def maxNum(a,b): return a > b ? a: b max = maxNum(maxNum(number1,number2),maxNum(number3,number4)) ``` |
51 weiyuzhou OP 想不到我的帖子会这么火!惭愧,真应该早点学习编程~感谢大家! |
52 ppwangs 2017-10-24 17:57:42 +08:00 冒泡,二分。 |
53 ThinkCat 2017-10-24 18:42:53 +08:00 多看看 java8,可以这样: int max = Stream.of(number1,number2,number3,number4).reduce((a, b) -> a>b?a:b).get(); |
54 poorcai 2017-10-25 08:44:11 +08:00 顺带学习了 |