2014-11-17 2 views
-5

Я хотел бы получить помощь по преобразованию целого числа в слово. Я очень новичок в Java, у меня есть представление о том, что я думаю, что я буду делать, но вам нужна помощь.Преобразование числа в слово

Код должен печатать слова числа от 0 до 999 и один раз -1, введенный в сканер, программа должна остановиться.

Как это:

Пожалуйста, введите число от 0 до 999: 1

ONE

Пожалуйста, введите число в диапазоне от 0 до 999: 11

одиннадцатая

Введите число от 0 до 999: 122

Сто двадцать два

Пожалуйста, введите число в диапазоне от 0 до 999: 1000

НОМЕРА OUT OF RANGE

Пожалуйста, введите число в диапазоне от 0 до 999: -1

Thank вы для использования нашей программы

я также должны использовать методы, чтобы сделать это «чистый»

+2

Так что, ** специально ** являются вы имеете проблема с? –

+0

новичок в массивах и не уверен, как настроить цикл, поэтому он останавливается при вводе -1. ​​ – sleepy

+2

. Моя первоначальная реакция состояла в том, чтобы разбить число на составные части (единицы, десятки, сотни), а затем выполнить поиск по карте для каждого компонента. Что ты уже испробовал? –

ответ

1

Прежде всего взять сотни место цифры разделяющего на 100 и распечатать соответствующий номер с помощью метода numberToWord((number/100), " HUNDRED"); так номер/100 будет находиться в диапазоне от 0 до 9, так что будет печатать цифры в слове каскадного по СТО вызову.

Теперь вы ушли с двухзначным номером, так что вы напрямую звоните numberToWord((number % 100), " ");, так как мы принимаем по модулю 100 номеров, поэтому он будет пропускать только две цифры. if (num > 19) {System.out.print(tens[num/10] + " " + ones[num % 10]);} тогда он займет десятки мест и напечатает десятки слов, объединенных одними. else {System.out.print(ones[num]);} непосредственно печатает слово от 1 до 19 из массива.

import java.util.Scanner; 

public class Test1 { 



     public static void main(String[] args) { 
      int number = 0; 
      Scanner scanner = new Scanner(System.in); 
      System.out.print("Please type a number between 0 and 999 OR type -1 to exit: "); 
      number = scanner.nextInt(); 
      while(number!=-1){ 
       if(number>=0 && number<=999){ 
        if(number==0){ 
         System.out.print("NUMBER AFTER CONVERSION:\tZERO"); 
        } else { 
         System.out.print("NUMBER AFTER CONVERSION:\t"); 
         numberToWord(((number/100) % 10), " HUNDRED"); 
         numberToWord((number % 100), " "); 
        } 

       } else{ 
        System.out.print("NUMBER OUT OF RANGE"); 
       } 
       System.out.print("\nPlease type a number between 0 and 999 OR type -1 to exit: "); 
       number = scanner.nextInt(); 
      } 
     } 

     public static void numberToWord(int num, String val) { 
      String ones[] = {" ", " ONE", " TWO", " THREE", " FOUR", " FIVE", " SIX", " SEVEN", " EIGHT", " NINE", " TEN", " ELEVEN", " TWELVE", " THIRTEEN", " FOURTEEN", " FIFTEEN", " SIXTEEN", " SEVENTEEN", " EIGHTEEN", " NINETEEN" 
      }; 
      String tens[] = {" ", " ", " TWENTY", " THIRTY", " FOURTY", " FIFTY", " SIXTY", " SEVENTY", " EIGHTY", " NINETY"}; 
      if (num > 19) { 
       System.out.print(tens[num/10] + " " + ones[num % 10]); 
      } else { 
       System.out.print(ones[num]); 
      } 
      if (num > 0) { 
       System.out.print(val); 
      } 
     } 
    } 

Пример вывода:

Please type a number between 0 and 999 OR type -1 to exit: 563 
NUMBER AFTER CONVERSION:  FIVE HUNDRED SIXTY THREE 
Please type a number between 0 and 999 OR type -1 to exit: 45 
NUMBER AFTER CONVERSION:  FOURTY FIVE 
Please type a number between 0 and 999 OR type -1 to exit: 6 
NUMBER AFTER CONVERSION:  SIX 
Please type a number between 0 and 999 OR type -1 to exit: 0 
NUMBER AFTER CONVERSION: ZERO 
Please type a number between 0 and 999 OR type -1 to exit: -1 
exit 
+0

Пожалуйста, добавьте некоторое объяснение. –

+0

@Joiner добавленное объяснение, вы можете посмотреть. – kriyeta

+0

Молодцы! Удалено нисходящее. Я еще не проверял его, но я вам доверяю! Upvote. –

2

Это рекурсивное решение номер в программе Word,

string unitsMap[] = { "zero", "one", "two", "three", "four", "five","six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }; 
string tensMap[] = { "zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" }; 

string NumberToWords(int number) 
{ 
if (number == 0) 
    return "zero"; 

if (number < 0) 
    return "minus " + NumberToWords(abs(number)); 

string words = ""; 

if ((number/1000000000) > 0) 
{ 
    words += NumberToWords(number/1000000000) + " billion "; 
    number %= 1000000000; 
} 

if ((number/1000000) > 0) 
{ 
    words += NumberToWords(number/1000000) + " million "; 
    number %= 1000000; 
} 

if ((number/1000) > 0) 
{ 
    words += NumberToWords(number/1000) + " thousand "; 
    number %= 1000; 
} 

if ((number/100) > 0) 
{ 
    words += NumberToWords(number/100) + " hundred "; 
    number %= 100; 
} 

if (number > 0) 
{ 
    if (number < 20) 
     words += unitsMap[number]; 
    else 
    { 
     words += tensMap[number/10]; 
     if ((number % 10) > 0) 
      words += "-" + unitsMap[number % 10]; 
    } 
} 

return words; 
} 
+0

Добавьте хорошее объяснение и уберите отступы. –

+0

Просто передайте номер и проведите его. Вы будете легко поняты :): P @AkshayHazari –

0

Вот как вы это делаете. Я сделал это от 1 до 10, но вы можете расширить его с 1 до 999.

//  values entered  |  result 
    //  2      |  You have entered:Two 
    //  10     |  You have entered: Ten 
    //  23     |  You have entered: 23 which is not in range. 

int i = Integer.parseInt(txtInput.getText()); 
    String[] namesOfNums = {"One", "Two", "Three","Four", "Five", "Six", "Seven","Eight", "Nine","Ten" }; 
    String output = ""; 
    if (i > 0 && i <=10) 
    { 

     output = namesOfNums[i - 1]; 
     lblDisplay.setText("You have entered: "+ output); 

    } 
    else 
    { 
     lblDisplay.setText("You have entered: "+ i +" which is not range."); 
    } 
+0

Какова цель цикла for? – rghome

+0

Вы правы, нет необходимости в цикле. –

0
public class NumberToWord 

{ 
    private static final String[] specialNames = { 
     "", 
     " thousand", 
     " million", 
     " billion", 
     " trillion", 
     " quadrillion", 
     " quintillion" 
    }; 

    private static final String[] tensNames = { 
     "", 
     " ten", 
     " twenty", 
     " thirty", 
     " forty", 
     " fifty", 
     " sixty", 
     " seventy", 
     " eighty", 
     " ninety" 
    }; 

    private static final String[] numNames = { 
     "", 
     " one", 
     " two", 
     " three", 
     " four", 
     " five", 
     " six", 
     " seven", 
     " eight", 
     " nine", 
     " ten", 
     " eleven", 
     " twelve", 
     " thirteen", 
     " fourteen", 
     " fifteen", 
     " sixteen", 
     " seventeen", 
     " eighteen", 
     " nineteen" 
    }; 

    private String convertLessThanOneThousand(int number) { 
     String current; 

     if (number % 100 < 20){ 
      current = numNames[number % 100]; 
      number /= 100; 
     } 
     else { 
      current = numNames[number % 10]; 
      number /= 10; 

      current = tensNames[number % 10] + current; 
      number /= 10; 
     } 
     if (number == 0) return current; 
     return numNames[number] + " hundred" + current; 
    } 

    public String convert(int number) { 

     if (number == 0) { return "zero"; } 

     String prefix = ""; 

     if (number < 0) { 
      number = -number; 
      prefix = "negative"; 
     } 

     String current = ""; 
     int place = 0; 

     do { 
      int n = number % 1000; 
      if (n != 0){ 
       String s = convertLessThanOneThousand(n); 
       current = s + specialNames[place] + current; 
      } 
      place++; 
      number /= 1000; 
     } while (number > 0); 

     return (prefix + current).trim(); 
    } 

    public static void main(String[] args) { 
     NumberToWord obj = new NumberToWord(); 
     System.out.println("*** " + obj.convert(123456789)); 
     System.out.println("*** " + obj.convert(-55)); 
    } 
} 

Источник: http://javahungry.blogspot.com/2014/05/convert-math-number-to-equivalent-readable-word-in-java-code-with-example.html

0
import java.util.Scanner; 
class Name 
{ 
    static String string; 
    static String st1[]={"","one","two","three","four","five","six","seven","eight","nine"}; 
    static String st2[]={"hundred","thousand","lakh","crore"}; 
    static String st3[]={"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"}; 
    static String st4[]={"twenty","thirty","fourty","fifty","sixty","seventy","eighty","ninety"}; 

    public static void main(String args[]) 
    { 
     Scanner in=new Scanner(System.in); 
     System.out.println("ENTER THE NUMBER"); 
     System.out.println(mac(in.nextInt())+" only"); 
    } 
    public static String mac(int n) 
    { 
     int word; 
     int nu=1; 
     string=""; 
     while(n!=0) 
     { 
      switch(nu) 
      { 
      case 1: 
       word=n%100; 
       pass(word); 
       if(n>100&&n%100!=0) 
       { 
        show("and "); 
       } 
       n=n/100; 
       break; 
      case 2: 
       word=n%10; 
       if(word!=0) 
       { 
        show(" "); 
        show(st2[0]); 
        show(" "); 
        pass(word); 
       } 
       n=n/10; 
       break; 
      case 3: 
       word=n%100; 
       if(word!=0) 
       { 
        show(" "); 
        show(st2[1]); 
        show(" "); 
        pass(word); 
       } 
       n=n/100; 
       break; 
      case 4: 
       word=n%100; 
       if(word!=0) 
       { 
        show(" "); 
        show(st2[2]); 
        show(" "); 
        pass(word); 
       } 
       n=n/100; 
       break; 
      case 5: 
       word=n%100; 
       if(word!=0) 
       { 
        show(" "); 
        show(st2[3]); 
        show(" "); 
        pass(word); 
       } 
       n=n/100; 
       break; 
      } 
      nu++; 
     } 
     return string; 
    } 
    public static void pass(int n) 
    { 
     int word,q; 
     if(n<10) 
     { 
      show(st1[n]); 
     } 
     if(n>9&&n<20) 
     { 
      show(st3[n-10]); 
     } 
     if(n>19) 
     { 
      word=n%10; 
      if(word==0) 
      { 
       q=n/10; 
       show(st4[q-2]); 
      } 
      else 
      { 
       q=n/10; 
       show(st1[word]); 
       show(" "); 
       show(st4[q-2]); 
      } 
     } 
    } 
    public static void show(String s) 
    { 
     String st=string; 
     string=s+st; 
    } 
} 
0
import java.util.Scanner; 

public class number to words { 

    static String string; 
    static String st1[]={"","one","two","three","four","five","six","seven","eight","nine"}; 
    static String st2[]={"hundred","thousand","lakh","crore"}; 
    static String st3[]={"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"}; 
    static String st4[]={"twenty","thirty","fourty","fifty","sixty","seventy","eighty","ninety"}; 

    public static void main(String args[]) 
    { 
    Scanner in=new Scanner(System.in); 
    System.out.println("ENTER THE NUMBER"); 
    System.out.println(mac(in.nextInt())+" only"); 
    } 
    public static String mac(int n) 
    { 
    int word; 
    int nu=1; 
    string=""; 
    while(n!=0) 
    { 
     switch(nu) 
     { 
     case 1: 
      word=n%100; 
      pass(word); 
      if(n>100&&n%100!=0) 
      { 
       show("and "); 
      } 
      n=n/100; 
      break; 
     case 2: 
      word=n%10; 
      if(word!=0) 
      { 
       show(" "); 
       show(st2[0]); 
       show(" "); 
       pass(word); 
      } 
      n=n/10; 
      break; 
     case 3: 
      word=n%100; 
      if(word!=0) 
      { 
       show(" "); 
       show(st2[1]); 
       show(" "); 
       pass(word); 
      } 
      n=n/100; 
      break; 
     case 4: 
      word=n%100; 
      if(word!=0) 
      { 
       show(" "); 
       show(st2[2]); 
       show(" "); 
       pass(word); 
      } 
      n=n/100; 
      break; 
     case 5: 
      word=n%100; 
      if(word!=0) 
      { 
       show(" "); 
       show(st2[3]); 
       show(" "); 
       pass(word); 
      } 
      n=n/100; 
      break; 
     } 
     nu++; 
    } 
    return string; 
    } 
    public static void pass(int n) 
    { 
    int word,q; 
    if(n<10) 
    { 
     show(st1[n]); 
    } 
    if(n>9&&n<20) 
    { 
     show(st3[n-10]); 
    } 
    if(n>19) 
    { 
     word=n%10; 
     if(word==0) 
     { 
      q=n/10; 
      show(st4[q-2]); 
     } 
     else 
     { 
      q=n/10; 
      show(st1[word]); 
      show(" "); 
      show(st4[q-2]); 
     } 
    } 
    } 
    public static void show(String s) 
    { 
    String st=string; 
    string=s+st; 
    } 
} 
1

попробовать это для одной цифры:

public class WordToNumber { 

static String string; 
static String st1[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; 
static int st2[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 

public static int mac(String n) { 
    int digit = 0; 
    try { 
     if(Arrays.asList(st1).contains(n.toLowerCase())){ 
      int a = Arrays.asList(st1).indexOf(n.toLowerCase()); 
      digit = st2[a]; 
     } 
     else{ 
      return -1; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return -1; 
    } 
    return digit; 
} 

}

Смежные вопросы