【问题标题】:I need help to write a code that finds the largest difference between two integers in a sequence我需要帮助来编写一个找到序列中两个整数之间最大差异的代码
【发布时间】:2018-07-15 04:11:52
【问题描述】:

我需要编写一个代码来找出序列中两个整数之间的最大差异。用户应该输入连续 10 天的股票价格,程序会告诉你每天最大的变化。不过我被卡住了。

import java.util.Scanner;

public class Change {

 public static void main (String [] args) {
    final int days = 10;
     int largeDiff = 0; // largest difference
 Scanner sc = new Scanner(System.in);
 System.out.println("Enter a stock price:");

int price1 = sc.nextInt();

 int price2 = sc.nextInt();

 int diff1 = price1 - price2;

 for (int i = 1; i <= 8; i++) {
    int priceA = sc.nextInt();
    int priceB = sc.nextInt();

    int diff2 = priceA - priceB;

    if (diff2 > diff1) {
        diff2 = largeDiff;
    }
    else {
        diff2 = diff1;
    }

 }

 System.out.println(largeDiff);

}

}

【问题讨论】:

  • “我被困住了。”。你被困在哪里了?你期望什么,实际得到什么?
  • 我希望它在最后打印出最大的差异,但它只是让你永远输入数字。

标签: java cloud9-ide


【解决方案1】:

您将largeDiff 分配给diff2。修改你的代码如下:

if (diff2 > diff1) {
        largeDiff = diff2;
    }
    else {
        largeDiff = diff1;
    }

你的代码也有问题。要找到最大的差异:

编辑: 做以下修改:

public static void main(String[] args) {
    final int days = 10;
    int largeDiff = 0; // largest difference
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a stock price:");

    int price1 = sc.nextInt();

    int price2 = sc.nextInt();

    int diff1 = price1 - price2;
    largeDiff = Math.abs(diff1);

    for (int i = 1; i <= 8; i++) {
        int priceA = sc.nextInt();
        int priceB = sc.nextInt();

        int diff2 = Math.abs(priceA - priceB);

        if (diff2 > largeDiff) {
            largeDiff = diff2;
        }
    }

    System.out.println(largeDiff);

}

注意: Math::abs 用于求绝对值

【讨论】:

  • 我做了这些更改,但是当我运行它时,它仍然只需要永远输入,即使在 for 循环结束后也不会打印任何内容。
  • @RosalieJung 永远??你确定你输入了 9 次,即 18 个输入吗?因为您总共要求输入 9 次。
  • 对不起,我已经开始工作了。我让 for 循环重复了太多次。
【解决方案2】:

用户应该输入连续 10 天的股票价格,程序会告诉你每天最大的变化

您的代码允许用户输入超过 10 个价格。当用户输入下一个价格时,您应该跟踪价格差异。请参阅以下算法:

import java.util.Scanner;

public class LargestDiff {

    public static void main(String[] args) {
        final int days = 10;
        Scanner sc = new Scanner(System.in);

        int largeDiff = calculateLargestDiff(sc, days);

        System.out.println(largeDiff);
        sc.close(); //don't forget to close scanner
    }

    public static int calculateLargestDiff(Scanner sc, int days){
        int largeDiff = 0;
        System.out.println("Enter a stock price for day 1");

        int price1 = sc.nextInt();

        for (int i = 2; i <= days; i++) {
            System.out.println("Enter a stock price for day "+i);
            int price2 = sc.nextInt();

            int diff2 = Math.abs(price1 - price2);
            price1 = price2;

            if (diff2 > largeDiff) {
                largeDiff = diff2;
            }
        }
        return largeDiff;
    }
}

您可能会注意到我创建了第二个方法,它接受它的依赖项 - 一个 Scanner 和一个 int 作为参数。这使得编写自动化测试变得更加容易。

需要考虑的其他事项 - 您的代码无法处理无效输入。例如,如果用户输入一个字母而不是一个整数。您可能应该添加逻辑来处理这些场景。

【讨论】:

    【解决方案3】:

    我喜欢先接受输入,然后进行所有必要的计算。您还应该从用户那里获取 10 个输入,对吗?因此,采用一个移动大约 8 次并且每次从 Scanner 获取 2 个输入的循环基本上意味着您需要提供总共 16 个输入,这绝对不是您想要的。下面给出我的解决方案以供参考。

    public class Change
    {
        public static void main (String[] args)
        {
            Scanner sc = new Scanner(System.in);
    
            int totalDays = 10;
            int stockPrices[] = new int[totalDays];
    
            for(int c = 1; c <= totalDays; c++) {
    
                System.out.printf("Enter stock price for day %d\n", c);
                stockPrices[c - 1] = sc.nextInt();
            }
    
            int largestDiff = -1;
            for(int c = 0; c < totalDays - 1; c++) {
    
                int diff = Math.abs(stockPrices[c] - stockPrices[c + 1]);
                if(diff > largestDiff) {
    
                    largestDiff = diff;
                }
            }
    
            System.out.printf("Largest difference in stock price is %d\n", largestDiff);
        }
    }
    

    【讨论】:

    • 我需要让我的 for 循环迭代 4 次才能工作,但我让它迭代了太多次。我不允许在我的解决方案中使用数组,所以很遗憾我不能使用它。
    【解决方案4】:
    import java.util.Scanner;
    public class Change {
    
    public static void main (String [] args) {
    final int days = 10;
    int largeDiff = 0; // largest difference
    int diff1 = 0;
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a stock price:");
    
    for (int i = 0; i < 5; i++) {
    int priceA = sc.nextInt();
    int priceB = sc.nextInt();
    
    int diff2 = Math.abs(priceA - priceB);
    
    if (diff2 > diff1) {
        largeDiff = diff2;
        diff1 = diff2;
    
    }
    }
    System.out.println(largeDiff);
    
    }
    }
    

    【讨论】:

    • 别忘了回答你的问题。
    猜你喜欢
    • 2012-03-08
    • 2018-12-07
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多