У меня есть вопрос, заданный моим учителем информатики, чтобы узнать количество двухзначного числа и трехзначного числа и завершить программу (когда пользователь вводит 0) и распечатать общее двухзначное, трехзначное число и другое цифровое число.
Это пример вывода в окне терминала:
Enter your number: 23
Enter your number: 1
Enter your number: 412
Enter your number: -123
Enter your number: 32332
Enter your number: 12
Enter your number: -1
Enter your number: 0
Two digit numbers : 2
Three digit numbers : 2
Other digit numbers : 3
Это моя программа:
import java.io.*;
public class two_three_digits
{
static DataInputStream dis = new DataInputStream(System.in);
static void main()throws IOException
{
int two = 0 , three = 0 , oth = 0;
while(true)
{
System.out.print("Enter your number: ");
int n = Integer.parseInt(dis.readLine());
n = (int)Math.abs(n);
int d = 0,cn = n;
if(n == 0)break;
else if(n > 9 && n < 100)two++;
else if(n > 99 && n <1000)three++;
else oth++;
}
System.out.println("Two digit numbers : "+two);
System.out.println("Three digit numbers : "+three);
System.out.println("Other digit numbers : "+oth);
}
}
Я хотел знать, есть ли более короткий способ выполнить ту же задачу? Например, используя arrays
, string
или Bitswise operator
и т. д. Также я бы предпочел, чтобы вы рассказали, как это сделать, а не просто программу, поскольку я учусь и хочу решить это самостоятельно.
Редактировать: извините, потому что я забыл назвать одну вещь - под словом быстрее я на самом деле имел в виду скорость (и более или менее размер программы тоже)
DataInputStream.readLine()
, этот метод давно устарел, я думаю, сJDK 1.1
, вместо этого используйте либоBufferedReader.readLine()
, либо используйтеDataInputStream.readUTF()
- person nIcE cOw   schedule 11.07.2014optimalizations
с использованием дорогой функцииlog10
. - person kajacx   schedule 11.07.2014