该程序的目的是从命令行中取一个三位数字,然后将其反转。之后,它应该从原始数字中减去反向,并将原始数据添加到反转。
这应该只取三位数字,数字的第一个数字必须大于最后一个数字,以便在减去数字时不是负数。
代码编译正确但是当我在命令行中输入一个数字时,打印出“输入一个三位数字,第一个数字大于第三个数字”的行。
打印出来的内容如
$ java Rev 351
Reverse and subtract:
351
153 -
---
198
Reverse and add:
198
891 +
---
1089
这是我的代码:
public class Rev
{
public static void main(String[] args)
{
int num = 0;
for (int i = 0; i < args.length; i++)
{
System.out.println("Enter a three digit number, with the first digit larger than the third");
num = Integer.parseInt(args[i]);
reverseNum(num);
subtractNum(num);
addNum(num);
}
}
static boolean checkDigits(int number) // checks if numbers are correct
{
int reverse = reverseNum(number);
if(number > reverse)
{
throw new Error("Reverse number needs to be less than the original number!");
}
else
{
return true;
}
}
static int reverseNum(int number) //reverses number
{
int reverse = 0;
int r = 0;
while (number != 0)
{
if(number < 1000 || number > 99)
{
r = number % 10;
reverse = (reverse*10) + r;
number = number/10;
}
}
return reverse;
}
static void subtractNum(int number) // subtracts
{
int reverse = reverseNum(number);
int total = number - reverse;
System.out.println("Reverse and subtract: ");
System.out.println(number);
System.out.println(reverse + " - ");
System.out.println("---");
System.out.println(total);
System.out.println();
number = total;
}
static void addNum(int number) // adds
{
int reverse = reverseNum(number);
int total = number + reverse;
System.out.println("Reverse and add: ");
System.out.println(number);
System.out.println(reverse + " + ");
System.out.println("---");
System.out.println(total);
number = total;
}
}
答案 0 :(得分:1)
public static void main(String[] args)
{
int num = 0;
for (int i = 0; i < args.length; i++)
{
System.out.println("Enter a three digit number, with the first digit larger than the third");
num = Integer.parseInt(args[i]);
reverseNum(num);
subtractNum(num);
addNum(num);
}
}
因此args
变量是命令行参数。因此,如果您通过命令行进行编译,则可以调用类似java Rev.class 321
的内容,其中321
是您的3位数字。如果要使用Java控制台获取输入,请使用Scanner
。
要获取输入,请使用以下内容:
Scanner sc = new Scanner(System.in);
num = sc.nextInt();
答案 1 :(得分:0)
您实际上从来没有从输入中获得数字。您需要在ISOLATION
:
main()
public static void main(String[] args)
{
int num = 0;
for (int i = 0; i < args.length; i++)
{
System.out.println("Enter a three digit number, with the first digit larger than the third");
try (Scanner s = new Scanner(System.in)){
num = s.nextInt();
}
reverseNum(num);
subtractNum(num);
addNum(num);
}
}
读取主输入流(来自键盘)。否则,当您在命令行中传入参数时,它还没有要求您输入,并打印出输入请求。
你的另一个问题是你在获得号码后没有打电话给checkDigits(),所以你应该做一个while循环使用它,直到你得到一个你接受的号码,如下:
Scanner
另外,你的其他方法是不正确的,因为它们对输入参数起作用(这对于对象而不是基元是可能的,并且在任何情况下都是不好的做法)。
而是将它们写为接收值并返回它们的函数,然后再次修改main,看起来像这样:
public static void main(String[] args)
{
int num = -1;
while (num < 0 || !checkDigits(num)){
System.out.println("Enter a three digit number, with the first digit larger than the third");
try (Scanner s = new Scanner(System.in)){
num = s.nextInt();
}
}
reverseNum(num);
subtractNum(num);
addNum(num);
}