打印用户输入的两个最高值

2024-04-18

我有一个作业,我必须编写一段代码,让用户决定要写入的 int 值的数量,然后决定这些值应该是什么。用户必须至少有 2 个输入。然后程序将比较输入的值,然后打印出两个最高值。到目前为止,我设法打印出最高的值,但我不确定我的做法有什么问题,因为如果我选择打印出 2 个数字并且首先输入最高的数字,则输出将变为 0。我也不确定如何跟踪第二高的数字。希望得到一些帮助。

import java.util.Scanner;
public class ToStoersteTall{
    public static void main(String[] args){
        System.out.println("How many numbers? (minimum 2)?:");
        Scanner reader = new Scanner(System.in);

        if (reader.hasNextInt()) {
            int numbers = reader.nextInt();
            if (numbers >= 2) {
                System.out.println("Enter value #1");
                if (reader.hasNextInt()) {
                    int num1 = reader.nextInt();
                    System.out.println("Enter value #2");
                    if (reader.hasNextInt()) {
                        int num2 = reader.nextInt();

                        int biggest = 0;
                        for (int i = 3; i <= tall; i++) {
                            System.out.println("Enter value #" + i);
                            int num3 = reader.nextInt();
                            biggest = num1;
                            if(biggest < num3){
                                biggest = num3;
                            }
                        }
                        System.out.println(biggest);
                    } else {
                        System.out.println("Please enter an integer");
                    }                   
                } else {
                    System.out.println("Please enter an integer");
                }
            } else {
                System.out.println("Please enter an integer equal or higher than 2.");
            }   
        } else {
            System.out.print("Vennligst oppgi et heltall større eller lik 2.");
        }   
    }
}

我有一个作业,我必须编写一段代码,让用户决定要写入的 int 值的数量,然后决定这些值应该是什么。用户必须至少有 2 个输入。然后程序将比较输入的值,然后打印出两个最高值。到目前为止,我设法打印出最高的值,但我不确定我的做法有什么问题,因为如果我选择打印出 2 个数字并且首先输入最高的数字,则输出将变为 0。我也不确定如何跟踪第二高的数字。希望得到一些帮助。

有几件事:

  • 关闭扫描仪(以及一般与 IO 相关的资源)的好习惯

  • 减少 if 语句阻止膨胀以提高可读性

  • 您指定了 2 个有保证的数字,因此请尝试在循环之前解析这些数字

  • 可以删除 system.exit 调用或替换 system.exit 并将大量代码移回到更大的 if-else 块中,如 OP 中的原始状态(但为了可读性,我又提到了)

  • 添加了对输入的第一个和第二个数字的检查,以确保 high1 是最高值,high2 是第二高值。

  • 在循环和检查值时保持顺序(注意:不使用数组),如果数字是新高,则替换 high1 并将 high1 的值向下移动到 high2,或者如果数字是第二(新)高,则替换 high2。如果值相等,则排除此逻辑,您可能需要根据自己的约束进行指定

    import java.io.IOException;
    import java.util.Scanner;
    public class ToStoersteTall {
        public static void main(String[] args) throws IOException {
        System.out.println("How many numbers? (minimum 2)?:");
        Scanner reader = new Scanner(System.in);
        int n = 0;
        if (reader.hasNextInt()) {
            n = reader.nextInt();
        } else {
            System.out.println("Vennligst oppgi et heltall større eller lik 2.");
            System.exit(-1); // quits execution
        }
    
        if (n < 2) {
            System.out.println("Please enter an integer equal or higher than 2.");
            System.exit(-2);
        }
    
        // Since guaranteed 2 numbers, parse and assign now
        int high1 = 0, high2 = 0;
        System.out.println("Enter value # 1");
        if (reader.hasNextInt())
            high1 = reader.nextInt();
        System.out.println("Enter value # 2");
        if (reader.hasNextInt())
            high2 = reader.nextInt();
    
        // check to see if a switch to keep correct highest order, swap values if so
        if (high1 < high2) {
            int t = high2;
            high2 = high1;
            high1 = t;
        }
    
        // loop won't execute if only 2 numbers input, but will if 3 or more specified at start
        for (int i = 2; i < n; ++i) {
            System.out.println("Enter value #" + (i + 1));
            if (reader.hasNextInt()) {
                int t = reader.nextInt();
                if (t > high1) {
                    high2 = high1; // throw away high2 value and replace with high1
                    high1 = t; // replace high1 value with new highest value                    
                } else if (t > high2) {
                    high2 = t;
                }
            } else {
                System.out.println("Please enter an interger");
            }
        }
    
        reader.close();
    
        System.out.println("The two highest numbers are: " + high1 + ", " + high2);
    }
    

    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打印用户输入的两个最高值 的相关文章

随机推荐

  • Fancybox:获取单击的锚点/元素的ID

    我正在尝试获取 fancybox 中单击 显示的元素的 id 我已经尝试过 this id 和 this attr id 但它们都不起作用 a lightbox image fancybox transitionIn elastic tra
  • 通过负索引访问数组的元素

    我想通过任意索引访问数组的内容 假设我们有一个包含三个元素的数组 模在这里派上用场 完美地解决了任何正整数的问题 var arr array foo bar foobar var someInteger 3 var element arra
  • 如何在 vue.config.js 中设置用于生产的 API 路径?

    我使用 vue cli3 进行设置 我已经在中设置了 devServer apivue config js file devServer proxy api target http localhost 1888 apps test main
  • Ravendb:如何删除给定类型的所有文档

    更具体地说 在 Raven DB 中 我想创建一个具有如下签名的通用方法 public void Clear
  • 如何使用语义和干净的 HTML、CSS 来制作不均匀的文本换行(不是方形或圆形)?

    如何使用语义和干净的 HTML CSS 进行这样的文本换行 与所有浏览器兼容 添加不同的类 p 如果没有其他解决方案 这是我想到的唯一解决方案 但这样每次客户都无法更改类 这是缺点 您可以将图像设置为背景 p p 然后将透明容器以您不希望文
  • SAS 全球日期比较

    我正在尝试进行日期比较 但没有得到正确的结果 有谁知道发生了什么事吗 macro ttt let check start 28APR2014 if check start d lt 25may2014 d then let true 1 e
  • 如何使 multer 正确解析使用表单数据发送的客户端请求?

    我想将数据从客户端传输到双方都使用的服务器计算机Node js 在客户端我正在使用库axios and form data 在我正在使用的服务器上express and multer 我正在使用的客户端代码如下 const FormData
  • MarkerView 走出图表以获取图表上的最后一个点

    我正在使用 MarkerView 类在图表中显示标记视图 我创建的标记视图布局包含两个文本视图 一个在另一个下面 我面临的问题是图表上最后一点的标记视图一半在图表内 一半在图表外 下面两张图清楚地说明了问题 第一张图片显示了图表中心点的标记
  • 通过在 MATLAB 中填充当前值来扩展数组

    我有一个相当简单的问题 我只是想知道在 MATLAB 中是否有一种简单的方法可以做到这一点 即一个函数来完成此任务 而不是自己编写循环或其他东西 假设我有一个时间序列 其中 Time 是1 1 1000和数据是2 1 1 1000 我想通过
  • 如何在不使用依赖注入的情况下模拟另一个包中的函数?

    有点像 golang 初学者 但我以前曾使用过测试框架 如何在不注入依赖项的情况下模拟和伪造依赖方法返回的内容 我不想使用依赖项注入的原因是因为正在使用许多外部包方法 并且在构造函数中注入所有方法很麻烦 我已经在线 stackoverflo
  • phpmyadmin 中令人讨厌的警告[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 每次我登录 phpMyAdmin 时 我都会在红色框中收到一条恼人的警告消息 我已经卸载了 xampp 然后再次安装了几次 我删除
  • Google_maps_flutter 在 iOS 中不显示缩放和路线按钮

    在 IOS 中使用 google map flutter api 时 不会显示缩放和路线按钮 当点击地图上的任何位置时 这些按钮会在 Android 中显示 但是 IOS 中不存在相同的行为 我希望这些按钮在 IOS 中也可用 IOS 中仅
  • 使用MSBuild与VS2017构建SSDT项目失败

    我正在尝试在我们的 Windows Server 2016 服务器上设置 sqlproj SSDT 项目的持续集成 为此 我在服务器上安装了 VS2017 和 SSDT 工具以获得所需的工具 我还安装了 MS build tools 201
  • 嵌套形式和 habtm

    我正在尝试保存到 habtm 关系中的联接表 但遇到问题 在我看来 我传递的组 ID 为 User model user rb class User lt ActiveRecord Base has and belongs to many
  • 配置HttpClientFactory时证书错误

    我需要添加证书HttpClientFactory 旧的实现与HttpClient看看这个 var cookieContainer new CookieContainer var handler new HttpClientHandler C
  • 如何将一列中的文本拆分为多行

    我正在处理一个大型 csv 文件 倒数第二列有一个文本字符串 我想用特定分隔符分割它 我想知道是否有一种简单的方法可以使用 pandas 或 python 来做到这一点 CustNum CustomerName ItemQty Item S
  • 使用 ASP.NET 4.5 应用程序中需要 WS-Security 的 Web 服务

    我需要使用一个 Web 服务 该服务需要基于 ASP NET 4 5 应用程序的 X 509 证书的 WS Security 到目前为止 我已经创建了 Web 参考 但我不知道如何实现 WS Security 我获得证书没有问题 但我不知道
  • svn 可以提供哪些报告?

    我们正在迁移到 SVN 对我们来说不幸的是 我们会定期接受审核 审核员需要以下信息 文件更改历史记录SVN访问历史添加了新文件文件的变化 是否有一个工具可以为我们生成这些报告 或其中一些报告 StatSVN是一个轻量级的颠覆报告生成器 ht
  • 如何使用jquery获取动态创建的没有Id的子元素的高度

    我有一个 div 它总是动态加载两个图像 并且可能在中间加载一个 div 图像或 div 都没有与之关联的 id 而且我不能让它们有 id 用萤火虫检查它们 它们只是显示为 img and div 我需要获取这个子 div 存在时的高度 我
  • 打印用户输入的两个最高值

    我有一个作业 我必须编写一段代码 让用户决定要写入的 int 值的数量 然后决定这些值应该是什么 用户必须至少有 2 个输入 然后程序将比较输入的值 然后打印出两个最高值 到目前为止 我设法打印出最高的值 但我不确定我的做法有什么问题 因为