必须输入“N”两次才能显示相关信息

时间:2014-12-17 01:45:13

标签: java sorting compilation

我尝试编写的内容会根据用户输入的内容按升序或降序对数字进行排序。当用户输入“Y'”时,程序可以按升序对它们进行排序。但如果他们进入N'按用户必须按降序排序' N'在显示之前两次。我已经发布了下面的语法,所以如果有人想告诉我错误/做错了什么,请随意这样做。

import java.util.*;

public class SortProgram { 
    public static void main(String args[]) { 
        Scanner in = new Scanner(System.in);
        System.out.println("\nHow many numbers do you want sorted?: ");
        int count = in.nextInt();
        int[] array = new int[count];

        for (int i = 0; i < count; i++) {
            System.out.print("Enter number #" + (i+1) + ": ");
            array[i] = in.nextInt();
        }

        System.out.print("\nPress 'Y' to sort numbers in  order, press 'N' to sort numbers in DESCENDING order: ");

        in.nextLine();

        boolean ascending = true;
        boolean descending = false;

        if (in.nextLine().toUpperCase().charAt(0) == 'Y') {
            ascending = true;
        } else if (in.nextLine().toUpperCase().charAt(0) == 'N') {
            descending = true;
            ascending = false;
        }

        for (int i = 0; i < count; i++) {
            for (int j = 0; j < count - 1; j++) {
                if (ascending) {
                    if (array[j] > array[j + 1]) {
                        int temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                    }
                } else if (!ascending) {
                    if (array[j] < array[j + 1]) {
                        int temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                    }
                }
            }
        }
        System.out.print("\nThe sorted numbers are: ");

        for (int i = 0; i < count; i++) {
            System.out.print(array[i] + " ");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

看起来您正在拨打in.nextLine()两次。每次调用时,程序都会从​​用户那里读取另一个东西。

默认情况下,您的代码按升序运行。但是,由于您输入两次,您需要输入两次“N”(当它“计数”时 - 即第二次,当您实际使用结果时)它才能工作。

修复此问题很简单:只需在声明in.nextLine()ascending之前删除descending

顺便说一句,您的用户输入测试代码比它需要的要复杂一些。要正确设置ascending,您只需要:

ascending = in.nextLine().equalsIgnoreCase("y");

它使用equalsIgnoreCase(),这相当于获取第一个字符的方法,高于它,并将其与'Y'进行比较。

这将在for循环之前替换if / elseif块。

附注2:你在for循环中有很多重复的代码。因为唯一不同的是if块中的条件,你可以使用布尔表达式而不是内部的if / else语句:

    for (int i = 0; i < count; i++) {
        for (int j = 0; j < count - 1; j++) {
            boolean swap = ascending
                    ? array[j] > array[j + 1]
                    : array[j] < array[j + 1];
            if (swap) {
                int temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }