小白自学,大家帮忙看看这个程序是否正确?

2017-10-23 22:00:19 +08:00
 weiyuzhou

门外汉自学入门,刚刚看到 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);
    }
}
4991 次点击
所在节点    程序员
54 条回复
weiyuzhou
2017-10-23 22:10:42 +08:00
忘了说,学的是 java 语言。
takanasi
2017-10-23 22:13:32 +08:00
>>> a=[1,2,3,4]
>>> max(a)
4

人生苦短,快用 python
weiyuzhou
2017-10-23 22:44:40 +08:00
@takanasi 这是 Python 数组吗?看不懂啊…为什么都没人回复我… 😭
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#
mjikop1231
2017-10-23 22:53:18 +08:00
明明 java 也有 sort
(不过 java 代码好长啊好长啊好长啊)
shengkunz
2017-10-23 22:53:41 +08:00
应该先排序,然后在输出最大的那个。
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);
hcnhcn012
2017-10-23 23:00:44 +08:00
>>> print(max([i for i in range(1,5)]))
4
hcnhcn012
2017-10-23 23:01:25 +08:00
人生苦短,快用 python
qiayue
2017-10-23 23:01:35 +08:00
说个你比较能理解的,你先三个数比较,找出最大数,然后跟第四个数比较
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
nyanyh
2017-10-23 23:05:09 +08:00
算法第四版 Java 实现的一开始就介绍了 Comparable 如何使用,所以我认为使用 Collections 并无任何不妥
weiyuzhou
2017-10-23 23:09:35 +08:00
@qiayue 这个靠谱,能理解!也谢谢大家,感觉脑子不够用,稍微难点的就不知道怎么算了,不知道合不合适学编程…
weiyuzhou
2017-10-23 23:11:27 +08:00
@misaka19000 这个暂时还没学过…谢谢!
AlwaysBehave
2017-10-23 23:15:54 +08:00
@nyanyh +1
看自学主要方向吧
算法的话直接看底层怎么实现的(数据结构是前提?),应用的话就直接学会快速读懂手册有流程意识?(有拆分问题)
LxExExl
2017-10-23 23:19:30 +08:00
楼上排序和用数组的都是二逼 答非所问

if(a>b && a>c && a>d) largest=a;

同理 写其他三行就行了
ipwx
2017-10-23 23:22:04 +08:00
@LxExExl 用 >= 更好。
misaka19000
2017-10-23 23:22:13 +08:00
@LxExExl
@Livid
16 楼人身攻击
weiyuzhou
2017-10-23 23:25:43 +08:00
@LxExExl 与运算,这个我懂,怎么没想到,多谢!
JamesMackerel
2017-10-23 23:27:10 +08:00
不需要这么复杂啊。
用数组存起来,假设是 num,然后你就:

largest = num[0];
for(int t: num){
if(largest > t) largest = t;
}

楼上说的那些先排序再取最大的,考虑正常的排序算法,它们的时间复杂度最优也要 nlogn,而这个方法是 n。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/400057

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX