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

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);
    }
}
4988 次点击
所在节点    程序员
54 条回复
acgnsstech
2017-10-23 23:27:35 +08:00
@takanasi
@yejinmo

请看我大 C 艹版本

int a[4] = { 4,2,3,1 };
cout<<*max_element(a, a+4)<<endl;
thet
2017-10-23 23:33:02 +08:00
可以搜搜排序算法看看
x7395759
2017-10-23 23:48:50 +08:00
你们能不能专心解决问题!!!

其实编码是一个表现思路的过程,一个个比较还是排序还是冒泡啥的,都是思路。

不必担心代码的难易,前期要专注于思维的培养。
sagaxu
2017-10-23 23:52:07 +08:00
IntStream.range(0, 4).map(i -> input.nextInt()).max().ifPresent(System.out::println);
zjp
2017-10-24 00:00:54 +08:00
同意 #23 楼
楼上很多方法都能解决问题(用其他语言的过分了啊 。
#7 #2
仅仅求最大值,对所有数字排序明显多余。对简单的问题用不简洁的做法多半是思维跑偏了
zjp
2017-10-24 00:03:25 +08:00
@zjp 手滑
同意 #23 楼
楼上很多方法都能解决问题(安利其他语言的过分了啊 。
#7 #20 用数组
#11 用集合排序
#24 用 Java8 的流
仅仅求最大值,对所有数字排序明显多余。对简单的问题用不简洁的做法多半是思维跑偏了
zjp
2017-10-24 00:05:28 +08:00
@zjp 23333 说那么多原来只能用 if 语句,逗比了🌚
cstome
2017-10-24 00:29:31 +08:00
歪个楼;
我觉得入门写代码的话其实可以从简单的语言,比如 python 甚至 JS 入门,等你熟悉基本语法后,再考虑学习算法。

这样还有个好处,不如当你遇到某些语言没有 sort 时,你也会想着怎么构造个 sort 方法,而不是这样写判断。
前期如果为了实现某个功能,用一堆 if else for 来实现,我觉得是没有意义的。
cstome
2017-10-24 00:31:57 +08:00
@cstome PS 我觉得从主流语言的语法的角度,我更建议从 JS 入门编程。
weiyuzhou
2017-10-24 00:38:04 +08:00
@cstome 谢谢你的建议,我会参考。先试试看 Java 学不下去就转战 python。
weiyuzhou
2017-10-24 00:40:08 +08:00
经过大家的提点我已经我已经重写了代码,虽然仍然很笨拙,但是至少代码结构更加清晰了。不管怎么刚刚入门嘛也是一种解决方法。
代码现在是这样子:
```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);
}
}
```
mario85
2017-10-24 00:52:12 +08:00
其实哪用那么麻烦,既然你有四个输入变量、一个用来存最大的变量和 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); //了
weiyuzhou
2017-10-24 01:00:52 +08:00
@mario85 厉害啦...表示智商很受伤 /cry
mario85
2017-10-24 01:37:39 +08:00
@weiyuzhou 其实楼上的兄弟已经写出来啦,我只是考虑到只学到 if 能看懂,把只用 if 的写法写出来而已
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));
seognilV2
2017-10-24 08:23:53 +08:00
只要对比 N-1 次 小的丢弃(也就是大的存到一个变量里向后传递) 就行了
就像是冒泡排序(的一部分)
wxyz
2017-10-24 08:50:04 +08:00
@qwertyegg 很别致
yongjing
2017-10-24 08:51:18 +08:00
论简洁,自然是我大 JS Math.max(num1,num2,num3,num4)
oaix
2017-10-24 09:09:01 +08:00
java 没有那么复杂
IntStream.of(1, 2, 3, 4).max();
oaix
2017-10-24 09:10:04 +08:00
@oaix 当然你要先升级到 java8...

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

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

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

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

© 2021 V2EX