Преобразуйте целое число от 0 до 10 и замените слово Engli sh, соответствующее целому числу - PullRequest
2 голосов
/ 30 апреля 2020

Здесь, в этом коде, когда на входе появляется 10, он печатает один ноль вместо десяти.

Как решить эту проблему?

import java.util.Scanner;

public class Program {
    public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        String phrase = scn.nextLine();
        String[] digits = {"0","1","2","3","4","5","6","7","8","9","10"};
        String[] alphabets = {"zero","one","two","three","four","five","six","seven","eight","nine","ten"};
        for (int i=0; i<digits.length; i++) {
            phrase = phrase.replaceAll(digits[i],alphabets[i]+"");
        }
        System.out.println(phrase);
    }
}

Ответы [ 4 ]

3 голосов
/ 30 апреля 2020

Десять - это первое «ди git», которое на самом деле состоит из двух цифр. Вы меняете ноль и один первый. Вместо этого сначала измените десять, чтобы обработать этот случай (или вы могли бы сделать это A вместо «10» - у вас здесь, похоже, база одиннадцать).

String[] digits = { "10", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
String[] alphabets = { "ten", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
1 голос
/ 30 апреля 2020

Это из-за неправильного метода итерации, вам нужно выполнить итерацию в обратном порядке.

    public class Sample {
public static void main(String[] args) {
    Scanner scn = new Scanner(System.in);
    String phrase = scn.nextLine();
    String[] digits = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
    String[] alphabets = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"};
    for (int i = digits.length - 1; i >= 0; i--) {
        phrase = phrase.replaceAll(digits[i], alphabets[i] + "");
    }
    System.out.println(phrase);
}

}

0 голосов
/ 30 апреля 2020

Ниже приведен обходной путь:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        String phrase = scn.nextLine();
        String[] digits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
        String[] alphabets = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
        for (int i = 0; i < digits.length; i++) {
            phrase = phrase.replace(digits[i], alphabets[i]).replace("onezero", "ten");
        }
        System.out.println(phrase);
    }
}

Пример выполнения:

hello10world
hellotenworld

Обратите внимание, что вместо него следует использовать replace replaceAll , который используется с регулярным выражением.

0 голосов
/ 30 апреля 2020

Ваша проблема в том, что вы обрабатываете каждый символ на входе, возможно, без пробелов вместо слов, разделенных пробелами.

Вы можете разделить ввод на слова, выполнив String[] numbers = phrase.split(" ");, а затем создать новая возвращаемая строка, в которой каждое число заменяется соответствующим словом.

Возможно, вам следует использовать хэш-карту вместо двух массивов.

...