如何获得打印的1位数字而不是输入的原始数字?

时间:2018-11-18 22:06:39

标签: java

您好,这是我的第一篇文章,对不起,如果我问错了这个问题,但是,我也是Java编程的新手,我试图找到最大的数字并打印最大的数字,然后继续打印最大的数字(如果这很有意义),所以我使用的代码是这样的:

    public static void max(String number) {
    if (number.isEmpty()) {
        System.out.println("The string is empty. Good-bye.");
        System.exit(0);
    }

    int max = Integer.parseInt(number.charAt(0)+"");

    for (int i = 1; i < number.length(); i++) {
        int compare = Integer.parseInt(number.charAt(i)+"");
        if (compare > max) {
            max = compare;
        }
    }

    System.out.println(max);
}

    public static void main(String args[]){
    Scanner sc = new Scanner(System.in);
    double weight, temp;
    boolean special, immediate;

    System.out.println("Please enter three numbers for serial number: "); // serial and  msb question
    String msb = sc.nextLine(); // input serial
    System.out.println("The MSB of the serial number is: ");
    max(msb); // determines largest number

这确实会打印出序列中最大的数字,但是当我再次打印出该数字时:

System.out.println("Item "+ msb); 

我得到了原始键入的数字

如果我这样做:

System.out.println("Item "+ max(msb)); 

我收到“不允许的'void'类型”错误。

原始输出是这样的(我删除了大多数不必要的代码): 请输入三个数字作为序列号: 456 序列号的最高位为: 6 真正 体重是多少? 12 456物品为12.0千克。移至第7站。

我想说的是: 请输入三个数字作为序列号: 456 序列号的最高位为: 6 真正 体重是多少? 12 项目6为12.0千克。移至第7站。

TLDR,我缺少什么或者我没有看到这妨碍了我将1位MSB打印出来?

1 个答案:

答案 0 :(得分:1)

首先,封装是一个好习惯。因此,要找到给定maxDigit(整数或长整数)的number,最好接受它作为参数并返回最大数字:int maxDigit(int msb)

第二,您可以将数字转换成字符串,然后遍历所有数字以找到最大值,这需要 O(n)时间:

public static int maxDigit(int msb) {
   char max = '\0';

   for(char ch : String.valueOf(Math.abs(msb)).toCharArray())
       max = Math.max(max, ch);

    return max - '0';
}

或者,您可以先对字符数组进行排序,然后检索最后一个元素数组,这需要 O(nlogn)

public static int maxDigit(int msb) {
    char[] arr = String.valueOf(Math.abs(msb)).toCharArray();
    Arrays.sort(arr);
    return arr[arr.length - 1] - '0';
}

最后,客户端方法可能如下所示:

public static void main(String... args) {
    try (Scanner scan = new Scanner(System.in)) {
        System.out.println("Please enter three numbers for serial number: ");
        System.out.println("The MSB of the serial number is: " + maxDigit(scan.nextInt()));
    }
}