有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我需要帮助来编写一个代码,找出序列中两个整数之间的最大差异

我需要编写一个代码,找出序列中两个整数之间的最大差异。用户应该输入连续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);

}

}

共 (4) 个答案

  1. # 1 楼答案

    我喜欢先输入数据,然后做所有必要的计算。你应该从用户那里获取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);
        }
    }
    
  2. # 2 楼答案

    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);
    
    }
    }
    
  3. # 3 楼答案

    您正在将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);
    
    }
    

    N.B:Math::abs用于查找绝对值

  4. # 4 楼答案

    The user is supposed to input the stock prices from 10 consecutive days and the program will tell you the biggest day to day change

    您的代码允许用户输入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;
        }
    }
    

    您可能会注意到,我创建了第二个方法,它将依赖项Scannerint作为参数。这使得编写自动化测试变得更容易

    其他需要考虑的代码——你的代码不处理无效的输入。例如,如果用户输入字母而不是整数。您可能应该添加逻辑来处理此类场景