黑马程序员技术交流社区

标题: 帮帮忙啊,有个问题 [打印本页]

作者: 酋长第一    时间: 2014-9-7 13:34
标题: 帮帮忙啊,有个问题
本帖最后由 酋长第一 于 2014-9-8 10:59 编辑

public class Text3 {
        public static void main(String[]args){
                Scanner sc=new Scanner(System.in);//键盘录入
               
                String[]strs={"零","一","二","三","四","五","六","七","八","九"};//定义一个字符串数据,根据索引从0开始分别对应零,一。。。
                for(int x=0;x<strs.length;x++){               
                        int num=sc.nextInt();
                                if(num==x){//如果输入的数字对应索引,打印大写的数字
                                        System.out.println(strs[x]);                        
                        }
                }
        }

是基础测试的一道题:从键盘接受一个数字,列出该数字的中文表示格式,
例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。

如果按照以上写,只能输入单个数字,比如:1,—— 大写一,因为数组索引没有比如:123,数组的索引没有123那么多
我现在想满足题目要求,该怎么弄?
作者: 酋长第一    时间: 2014-9-7 13:41
或者说,这种方法根本不可取?

用别的,给个思路
作者: 孤守星空    时间: 2014-9-7 13:45
可以把输入的数字拆开一个一个换
作者: turan    时间: 2014-9-7 13:55
之前有基础题分享中有原题
不用scaner  用BufferedReader
下面贴出他给出的代码 可以参照下
  1. package com.itheima;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. public class Test2
  6. {

  7.         /**
  8.          * 2、 从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。
  9.          *
  10.          * @param args
  11.          */
  12.         public static void main(String[] args)
  13.         {
  14.                 // TODO Auto-generated method stub
  15.                 System.out.println("请从控制台输入一个整数");
  16.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  17.                 try
  18.                 {
  19.                         // 转为char数组
  20.                         char[] input = br.readLine().toCharArray();
  21.                         // 反向历遍
  22.                         for (int i = input.length - 1; i >= 0; i--)
  23.                         {
  24.                                 // 打印经过转换的char
  25.                                 System.out.print(switchChar(input[i]));
  26.                         }
  27.                 } catch (IOException e)
  28.                 {                        
  29.                         e.printStackTrace();
  30.                 }

  31.         }

  32.         // 转换char为中文字符
  33.         public static String switchChar(char c)
  34.         {
  35.                 String msg = "";
  36.                 switch (c)
  37.                 {
  38.                 case '1':
  39.                         msg = "一";
  40.                         break;
  41.                 case '2':
  42.                         msg = "二";
  43.                         break;
  44.                 case '3':
  45.                         msg = "三";
  46.                         break;
  47.                 case '4':
  48.                         msg = "四";
  49.                         break;
  50.                 case '5':
  51.                         msg = "五";
  52.                         break;
  53.                 case '6':
  54.                         msg = "六";
  55.                         break;
  56.                 case '7':
  57.                         msg = "七";
  58.                         break;
  59.                 case '8':
  60.                         msg = "八";
  61.                         break;
  62.                 case '9':
  63.                         msg = "九";
  64.                         break;
  65.                 case '0':
  66.                         msg = "零";
  67.                         break;
  68.                 default:
  69.                         msg = "";
  70.                         break;
  71.                 }
  72.                 return msg;
  73.         }

  74. }
复制代码

作者: fouraa    时间: 2014-9-7 16:58

再顶一下~
作者: 孤鸢    时间: 2014-9-7 17:16
按你以前的思路,只需将字符串转化成字符数组,然后将字符对就的数字转化成,汉字字符串数组的角标打印即可,下面代码,哥们,你的技术分够了,敢给点黑马币帮帮我不:P
  1. import java.util.Scanner;
  2. public class NumToCh
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Scanner sc = new Scanner(System.in);

  7.                 String[] str = {"零","一","二","三","四","五","六","七","八","九"};
  8.                
  9.                 String str_in = sc.nextLine();

  10.                 //将读到的字符串转成字符数组
  11.                 char[] char_in = str_in.toCharArray();

  12.                 for(int i = 0; i<str_in.length(); i++)
  13.                 {
  14.                         //字符可跟整数混合运算,不过字符是按ASCII码表算的,0的ASCII码表对应48
  15.                         int p = (char_in[i]-48) % 10;
  16.                         System.out.print(str[p]);
  17.                 }
  18.         }
  19. }
复制代码

作者: 家进    时间: 2014-9-8 17:15
孤鸢 发表于 2014-9-7 17:16
按你以前的思路,只需将字符串转化成字符数组,然后将字符对就的数字转化成,汉字字符串数组的角标打印即可 ...

不错,简短有力又符题,比我写的简单多了
作者: 李天富    时间: 2014-9-8 19:53
  1. import java.util.Scanner;
  2. class  toCh
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Scanner in=new Scanner(System.in);
  7.                 int num=in.nextInt();
  8.                 toCh(num);
  9.         }
  10.         public static void toCh(int num)
  11.         {
  12.                 char[] ch={'零','一','二','三','四','五','六','七','八','九'};
  13.                 int k=1,temp=num;//k变量记录num的最高单位,比如num=3000时,k=1000.
  14.                 while(temp>=10)//获取num最高单位的过程。
  15.                 {
  16.                         temp=temp/10;
  17.                         k=k*10;

  18.                 }
  19.                 while (k>0)
  20.                 {
  21.                         int index=num/k;//获取num最高位的数字。
  22.                         num=num%k;//去掉num最高位。例如,num4398,去掉最高位后就是398.
  23.                         System.out.print(ch[index]);
  24.                         k=k/10;

  25.                 }
  26.                
  27.         }
  28. }
复制代码

String的很多功能还没学到,所以先这样写,也算一种思路吧。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2