您好,这是我的第一篇文章,对不起,如果我问错了这个问题,但是,我也是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打印出来?
答案 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()));
}
}