A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 lipingan0520 于 2013-5-1 10:14 编辑
  1. import java.io.*;
  2. import java.util.*;
  3. class Test115
  4. {
  5.         public static void main(String[] args)throws IOException
  6.         {
  7.                 BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); //从键盘录入数值
  8.                 String str = in.readLine();
  9.                 int conut = Integer.parseInt(str);

  10.                 BufferedReader fis = new BufferedReader(new FileReader("E:\\"+conut+".txt"));//和对应的文件想关联
  11.                 String len = null;
  12.                 while((len = fis.readLine()) != null)
  13.                         System.out.println(len);        //输出
  14.                 fis.close();
  15.                
  16.         }
  17. }
复制代码
从上面可以看出,我每输入一个数字,就要去找对应的文件,这样文件太多,程序不太灵活。

我想能不能把打印的文件都整合在一个文件里,当你输入要打印的数字,就去这个文件里找对应的图形。

请问大家可以实现吗?又怎么去做呢?


问题已解决,感谢各位朋友的回答,特别是kaka小明    提供的代码和思路感谢各位朋友的回答。这是传送门:http://bbs.itheima.com/forum.php?mod=viewthread&tid=48257&page=1&extra=#pid309706

未命名.jpg (48.85 KB, 下载次数: 2)

打印的图形文件

打印的图形文件

图形文件.zip

1.29 KB, 下载次数: 25

要打印的图形

13 个回复

倒序浏览
哇塞,居然能想到用IO的知识做这题,太给力了。
而我总是傻傻的按部就班做,太不懂灵活变通了。
有空我也得试试
回复 使用道具 举报
尹桥印 发表于 2013-5-1 08:26
将这些图形存在一个文本里面,用特定的符号分割,比如用--------(8个减号),然后调用的时候直接获取整个文 ...

我也想到了切割,但是不好下手切啊,你切下试试额。
回复 使用道具 举报
丘凤光 发表于 2013-5-1 08:32
哇塞,居然能想到用IO的知识做这题,太给力了。
而我总是傻傻的按部就班做,太不懂灵活变通了。
有空我也得 ...

把图形放文件里,不利于程序的扩展性,如果不能把文件整合,图形越多,文件就越多。既始把文件整合了,也不够灵活,自己预先要弄很多图形存在文件里。:)
回复 使用道具 举报
从图上看,图形是个螺旋数组,非要从文件中读取吗?如果非要从文件中读取的话,可以尝试在文件中检测边界:若干个星号“******”,以下代码测试通过!
public class Test115 {
        public static void main(String[] args) {
                int count=0;
                String  border="";//图形块边界检测字串
                int checkcount=0;//边界计数,1代表开始,2代表结束
                BufferedReader in=new
                                BufferedReader(new InputStreamReader(System.in));
                try {
                   String str=in.readLine();
                    count=Integer.parseInt(str);
                   /*
                    * 起始及结束检测字串 count+2个星号!
                    */
                    for(int i=0;i<count+2;i++){
                            border+='*';
                    }
                    BufferedReader br=new BufferedReader(new FileReader("D:\\图形.txt"));
                    
                    String tmp="";
                    while((tmp=br.readLine())!=null){
                            if(tmp.equals(border)){
                                    checkcount++;       
                                   
                            }
                    
                            if(checkcount==1){//检测开始边界,开始打印
                                    System.out.println(tmp);
                            }else if(checkcount==2){//边界结束,结束打印,退出循环
                                    System.out.println(tmp);
                                    break;
                            }
                    }
                    br.close();
                    
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

        }

}
回复 使用道具 举报
是解决问题的一种办法,可是通用性不足,
就好像打印1000遍hello word !
用for循环行,复制1000遍输出语句也能解决
打印图形还是锻炼的逻辑思维能力、对输出语句,循环语句的练习

至于你说的问题我也想不到有效的解决办法
回复 使用道具 举报
本帖最后由 lipingan0520 于 2013-5-1 09:34 编辑
kaka小明 发表于 2013-5-1 08:51
从图上看,图形是个螺旋数组,非要从文件中读取吗?如果非要从文件中读取的话,可以尝试在文件中检测边界: ...
  1. import java.io.*;
  2. public class Test116
  3. {
  4.         public static void main(String[] args)
  5.          {
  6.                 int count=0;
  7.                 String  border="";//图形块边界检测字串
  8.                 int checkcount=0;//边界计数,1代表开始,2代表结束
  9.                 BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
  10.                 try
  11.                  {
  12.                        String str=in.readLine();
  13.                        count=Integer.parseInt(str);
  14.                    /*
  15.                     * 起始及结束检测字串 count+2个星号!
  16.                     */
  17.                    //for(int i=0;i<count+2;i++){
  18.                        //     border+='*';
  19.                   // }
  20.                  if(count==3) border = "*****";
  21.                  if(count==4) border = "*************";
  22.                  if(count==5) border = "*************************";
  23.                  if(count==6) border = "*******************************************";
  24.                  BufferedReader br=new BufferedReader(new FileReader("E:\\1.txt"));
  25.                     
  26.                 String tmp="";
  27.                 while((tmp=br.readLine())!=null)
  28.                   {
  29.                           if(tmp.equals(border))        //判断要开始打印的图形
  30.                            {
  31.                                     checkcount++;        
  32.                            }
  33.                     
  34.                            if(checkcount==1)
  35.                           {                                                                //检测开始边界,开始打印
  36.                                System.out.println(tmp);
  37.                           }
  38.                           else if(checkcount==2)
  39.                           {                                                                //边界结束,结束打印,退出循环
  40.                                System.out.println(tmp);
  41.                                break;
  42.                          }
  43.             }
  44.                     br.close();
  45.                     
  46.       }
  47.        catch (IOException e)
  48.        {
  49.              // TODO Auto-generated catch block
  50.                e.printStackTrace();
  51.        }

  52. }

  53. }
复制代码
感谢你的回答,不过你只能打印第一个图形,打印第二个就会出错,
顺着你的代码修改了一下,能实现功能,谢谢你的回答,上面是修改后的。:)
回复 使用道具 举报
尹桥印 发表于 2013-5-1 08:26
将这些图形存在一个文本里面,用特定的符号分割,比如用--------(8个减号),然后调用的时候直接获取整个文 ...

问题已解决,这是传送门:http://bbs.itheima.com/thread-48257-1-1.html
回复 使用道具 举报
曹睿翔 发表于 2013-5-1 09:31
是解决问题的一种办法,可是通用性不足,
就好像打印1000遍hello word !
用for循环行,复制1000遍输出语句 ...

问题已解决,这是传送门:http://bbs.itheima.com/thread-48257-1-1.html
回复 使用道具 举报
kaka小明 发表于 2013-5-1 08:51
从图上看,图形是个螺旋数组,非要从文件中读取吗?如果非要从文件中读取的话,可以尝试在文件中检测边界: ...

问题已解决,这是传送门:http://bbs.itheima.com/thread-48257-1-1.html
回复 使用道具 举报
丘凤光 发表于 2013-5-1 08:32
哇塞,居然能想到用IO的知识做这题,太给力了。
而我总是傻傻的按部就班做,太不懂灵活变通了。
有空我也得 ...

问题已解决,这是传送门:http://bbs.itheima.com/thread-48257-1-1.html
回复 使用道具 举报
lipingan0520 发表于 2013-5-1 08:41
把图形放文件里,不利于程序的扩展性,如果不能把文件整合,图形越多,文件就越多。既始把文件整合了,也 ...

你这种思路我真的特别欣赏,因为我想到了它以后工作中的一个应用;P对于客户无理且不重要的而且难实现的要求,可以给他一个表面现象:victory:

点评

我去,这你也能想到  发表于 2013-5-1 10:34
回复 使用道具 举报
不错,不失为解决问题的一种方法。想了很久的用数组,矩阵,好乱,水平不够,还驾驭不了那东西。
回复 使用道具 举报
lipingan0520 发表于 2013-5-1 09:32
感谢你的回答,不过你只能打印第一个图形,打印第二个就会出错,
顺着你的代码修改了一下,能实现功能,谢 ...

boder一轮打印之后,没清掉,一直在+=。。。。。呵呵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马