Прочитайте числа между 0-999 и возвращает число в словах - PullRequest
1 голос
/ 30 марта 2019

Я создаю программу, которая читает числа в диапазоне от 0 до 99, а затем возвращает это число словами.У меня все остальные номера работают, но я не могу понять, как получить числа между 111 - 119, 211 - 219, 311 - 319 и т. Д. Вплоть до 911 - 919. Можете ли вы помочь?Спасибо!

Я попытался изменить numones = number%10; на numones = number%100;, но не удается прочитать все остальные числа и вызывает ошибку array outofbounds.

public static void main(String[] args) {
int numones;
    int numtens;
    int numhundreds;
    String [] ones = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
        "eleven", "twelve", "thirteen", "fourteen", "fiveteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"};
    String [] tens = {"","", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};

    System.out.print("Number: ");
    int number = In.nextInt();
    while(number !=- 1) {
        if (number >= 100 && number <= 999) {
            numhundreds = number / 100;
            numtens = number/10%10;
            numones = number%10;
            if (number == 100 || number == 200 || number == 300 || number == 400 || number == 500
            || number == 600 || number == 700 || number == 800 || number == 900){
               System.out.println("" + ones[numhundreds] + " " + "hundred");
               System.out.print("Number: ");
               number = In.nextInt();
           }else{
            System.out.println("" + ones[numhundreds] + " " + "hundred and " + tens[numtens] + " " + ones[numones]);
            System.out.print("Number: ");
            number = In.nextInt();
           }
       }
   }
}

}

Когда вводится 111, выходное значение равно ста единице, когда должно быть сто одиннадцать.

Ответы [ 3 ]

1 голос
/ 30 марта 2019

Прежде всего, вместо этого длинного оператора if:

if (number == 100 || number == 200 || number == 300 || number == 400 || number == 500
        || number == 600 || number == 700 || number == 800 || number == 900)

Вы можете просто проверить, не имеет ли деление числа на 100 остаток, например:

if(number%100==0)

Потому что 100% 100 = 0, 200% 100 = 0, 300% 100 = 0 ...

Теперь, как и Ришан сказал , вам нужно проверить, равно ли значение «numtens» 1, вы также можете сделать это внутри оператора печати, используя условный оператор :

else{
     System.out.println("" + ones[numhundreds] + " " +
     "hundred and "+ (numtens == 1 ? ones[numones+10] : tens[numtens] + " " + ones[numones]));     
     System.out.print("Number: ");
     number = In.nextInt();
   }
0 голосов
/ 30 марта 2019

Два случая отсутствовали, а именно: "... и [десятки]" и "[десятки]":

public static void main(String[] args) {
    int numones;
    int numtens;
    int numhundreds;
    int twenties;
    String [] ones = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
        "eleven", "twelve", "thirteen", "fourteen", "fiveteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"};
    String [] tens = {"","", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
    Scanner In = new Scanner (System.in);
    System.out.print("Number: ");
    int number = In.nextInt();
    while(number !=- 1) {
        if (number >= 100 && number <= 999) {
            numhundreds = number / 100;
            numtens = number/10%10;
            numones = number%10;
            twenties = number%100;
            System.out.println("Nbr"+number+" "+numtens);
            if (number == 100 || number == 200 || number == 300 || number == 400 || number == 500
            || number == 600 || number == 700 || number == 800 || number == 900){
               System.out.println("" + ones[numhundreds] + " " + "hundred");
               System.out.print("Number: ");
               number = In.nextInt();
           }else if(number%100<20 && numtens==1){
                System.out.println("" + ones[numhundreds] + " " + "hundred and " + ones[twenties]);
                System.out.print("Number: ");
                number = In.nextInt();
           }else{
            System.out.println("" + ones[numhundreds] + " " + "hundred and " + tens[numtens] + " " + ones[numones]);
            System.out.print("Number: ");
            number = In.nextInt();
           }
        }else{
            twenties = number%100;
            System.out.println("" +ones[twenties]);
            System.out.print("Number: ");
            number = In.nextInt();
        }

   }
}
0 голосов
/ 30 марта 2019

Вам нужно проверить, равно ли число в десятках 1 и может ли что-то вроде этого:

if (numtens == 1)
{
    System.out.println(... + ones[numones + 10]);
} else {
    System.out.println(... + tens[numtens] + ones[numones]);
}

Я бы пошел с таким подходом, который можно легко изменить, чтобы масштабировать до больших чисел, и IMO выглядит чище.

StringBuilder str = new StringBuilder();
if (numhundreds > 0)
{
    str.append(ones[numhundreds] + " hundred");
    if (numtens > 0 || numones > 0) str.append(" and ");
}
if (numtens > 0)
{
    if (numones == 1)
    {
        str.append(ones[numtens + numones]);
    } else {
        str.append(tens[numtens]);
        if (numones > 0) str.append(" ");
    }
}
if (numones > 1)
{
    str.append(ones[numones]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...