黑马程序员技术交流社区
标题:
io问题?
[打印本页]
作者:
黑马刘涛
时间:
2012-7-10 17:59
标题:
io问题?
本帖最后由 黑马刘涛 于 2012-7-16 12:14 编辑
遇到问题了,程序在System.out.println("str"+str)处结束
设置了断点调试,最后查看main方法中变量str能得到正确值,但是不能打印,程序在这里就结束了。在eclipse中会提示我一些我倒入的类和加密解密方法没用到,到底是哪儿出问题了?麻烦大家解惑!!
/*要求:参考API帮助,查找相关的方法,使用String类完成如下功能,对英文字符串进行加密处理。
(1) 将给定的英文字符取相反顺序,并改变每个字符的大小写形式。
(2) 将经第一步处理的信息进一步加工,将每个字符取其所在字母表中的顺序,取其后一个字母。
(3) 编写解密方法。
(4) 编写测试函数,在运行时通过命令行参数接受需要处理的字符串,将源字符串、加密字符串和解密字符串打印到屏幕输出。
*/
import java.lang.*;
import java.util.*;
import java.io.*;
class StringProc
{
public static void main(String[] args)
{
String str = "";
System.out.println("请输入英文字符串");
str = inputStr();//从键盘输入字符串
System.out.println("str"+str);
System.out.println("加密后输出");
Encryption e = new Encryption(str);
System.out.println(e.encryption(e.get()));
System.out.println("解密后输出");
Deciphering d = new Deciphering(e.encryption(e.get()));
System.out.println(d.deciphering(e.get()));
}
public static String inputStr()
{
BufferedReader bufr = null;
BufferedWriter bufw = null;
String line = null;
try
{
bufr = new BufferedReader(new InputStreamReader(System.in));
bufw = new BufferedWriter(new OutputStreamWriter(System.out));
//String line = null;
if((line=bufr.readLine())!=null)
{
bufw.write(line,0,line.length());
bufw.newLine();
bufw.flush();
}
return line;
}
catch (IOException e)
{
throw new RuntimeException("读写失败");
}
finally
{
try
{
if(bufr!=null)
bufr.close();
}
catch (IOException e)
{
throw new RuntimeException("读取流关闭失败");
}
try
{
if(bufw!=null)
bufw.close();
}
catch (IOException e)
{
throw new RuntimeException("写入流关闭失败");
}
}
}
}
//加密类
class Encryption
{
private String str = null;
//构造方法
Encryption(String str)
{
this.str = str;
}
public String get()
{
return this.str;
}
//加密方法
public String encryption(String str)
{
String oldString = str;
String newString = null;
//改变每个字符的大小写形式并将字符串取反
return newString = this.upperLowerCaseReverse(this.reverse(oldString));
}
//交换大小写并返回处理后的字符串
private String upperLowerCaseReverse(String oldString)
{
String str = oldString;
char[] charArray = str.toCharArray();
for(int i=0;i<charArray.length;i++)
{
char ch = charArray[i];
if(ch=='z')
charArray[i] = 'A';
else if(ch=='Z')
charArray[i] = 'A';
else if(Character.isLowerCase(ch)==true)
charArray[i] = (char)(Character.toUpperCase(ch) + 1);//小写英文字符改为大写取其所在字母表中的顺序其后一个字母
else if(Character.isUpperCase(ch)==true)
charArray[i] = (char)(Character.toLowerCase(ch) + 1);//大写英文字符改为小写取其所在字母表中的顺序其后一个字母
else
continue;
}
return String.copyValueOf(charArray);
}
//将给定的英文字符取相反顺序
private String reverse(String str)
{
StringBuilder sb = new StringBuilder(str);
return sb.reverse().substring(0,sb.length());
}
}
class Deciphering //解密类
{
private String str = null;
//构造方法
Deciphering(String str)
{
this.str = str;
}
public String get()
{
return this.str;
}
public String deciphering(String str)
{
String oldString = str;
String newString = null;
//改变每个字符的大小写形式并将字符串取反
return newString = this.upperLowerCaseReverse(this.reverse(oldString));
}
//交换大小写并返回处理后的字符串
private String upperLowerCaseReverse(String oldString)
{
String str = oldString;
char[] charArray = str.toCharArray();
for(int i=0;i<charArray.length;i++)
{
char ch = charArray[i];
if(ch=='a')
charArray[i] = 'Z';
else if(ch=='z')
charArray[i] = 'A';
else if(Character.isLowerCase(ch)==true)
charArray[i] = (char)(Character.toUpperCase(ch) - 1);//小写英文字符改为大写取其所在字母表中的顺序前面一个字母
else if(Character.isUpperCase(ch)==true)
charArray[i] = (char)(Character.toLowerCase(ch) - 1);//大写英文字符改为小写取其所在字母表中的顺序前面一个字母
else
continue;
}
return String.copyValueOf(charArray);
}
//将给定的英文字符取相反顺序
private String reverse(String str)
{
StringBuilder sb = new StringBuilder(str);
return sb.reverse().substring(0,sb.length());
}
}
复制代码
作者:
黑马刘涛
时间:
2012-7-10 18:05
版主 ,帮忙想想啊。我把基础课程里讲的一些内容都在这道题里写了一下。
作者:
rslheima
时间:
2012-7-10 18:28
本帖最后由 rslheima 于 2012-7-10 18:30 编辑
你要把finally里面的代码全都注释掉,就可以了,经验。。。。。。。。。
不过这个加解密程序,是不是 。。。。。。。。。。。。。
作者:
黑马刘涛
时间:
2012-7-10 18:33
果然,上面兄台真是一针见血,那到底是什么原因导致程序结束的呢?
作者:
rslheima
时间:
2012-7-10 18:36
你关闭out和in 后边就没法用了
参考资料:
http://bbs.itheima.com/forum.php?mod=viewthread&tid=17629
作者:
黑马刘涛
时间:
2012-7-11 00:27
关键是我关闭了out,in后也没再继续用。你给的帖子很有参考价值,但是是不同情况。
作者:
黑马刘涛
时间:
2012-7-11 00:54
对了,我主程序里还在继续用标准输出流out,去掉了关流操作。
修改了下,循环输入。
/*要求:参考API帮助,查找相关的方法,使用String类完成如下功能,对英文字符串进行加密处理。
(1) 将给定的英文字符取相反顺序,并改变每个字符的大小写形式。
(2) 将经第一步处理的信息进一步加工,将每个字符取其所在字母表中的顺序,取其后一个字母。
(3) 编写解密方法。
(4) 编写测试函数,在运行时通过命令行参数接受需要处理的字符串,将源字符串、加密字符串和解密字符串打印到屏幕输出。
*/
import java.lang.*;
import java.util.*;
import java.io.*;
class StringProc
{
public static void main(String[] args) throws NullPointerException
{
while(true)
{
String str = "";
System.out.println("请输入英文字符串");
str = inputStr();//从键盘输入字符串
System.out.println("加密后输出");
Encryption e = new Encryption(str);
System.out.println(e.encryption(e.get()));
System.out.println("解密后输出");
Deciphering d = new Deciphering(e.encryption(e.get()));
System.out.println(d.deciphering(d.get()));
System.out.println("");
}
}
public static String inputStr()
{
BufferedReader bufr = null;
BufferedWriter bufw = null;
String line = null;
try
{
bufr = new BufferedReader(new InputStreamReader(System.in));
bufw = new BufferedWriter(new OutputStreamWriter(System.out));
//String line = null;
if((line=bufr.readLine())!=null)
{
bufw.write(line,0,line.length());
bufw.newLine();
bufw.flush();
}
return line;
}
catch (IOException e)
{
throw new RuntimeException("读写失败");
}
}
}
//加密类
class Encryption
{
private String str = null;
//构造方法
Encryption(String str)
{
this.str = str;
}
public String get()
{
return this.str;
}
//加密方法
public String encryption(String str)
{
String oldString = str;
String newString = null;
//改变每个字符的大小写形式并将字符串取反
return newString = this.upperLowerCaseReverse(this.reverse(oldString));
}
//交换大小写并返回处理后的字符串
private String upperLowerCaseReverse(String oldString)
{
String str = oldString;
char[] charArray = str.toCharArray();
for(int i=0;i<charArray.length;i++)
{
char ch = charArray[i];
if(ch=='z')
charArray[i] = 'A';
else if(ch=='Z')
charArray[i] = 'a';
else if(Character.isLowerCase(ch)==true)
charArray[i] = (char)(Character.toUpperCase(ch) + 1);//小写英文字符改为大写取其所在字母表中的顺序其后一个字母
else if(Character.isUpperCase(ch)==true)
charArray[i] = (char)(Character.toLowerCase(ch) + 1);//大写英文字符改为小写取其所在字母表中的顺序其后一个字母
else
continue;
}
return String.copyValueOf(charArray);
}
//将给定的英文字符取相反顺序
private String reverse(String str)
{
StringBuilder sb = new StringBuilder(str);
return sb.reverse().substring(0,sb.length());
}
}
class Deciphering //解密类
{
private String str = null;
//构造方法
Deciphering(String str)
{
this.str = str;
}
public String get()
{
return this.str;
}
public String deciphering(String str)
{
String oldString = str;
String newString = null;
//改变每个字符的大小写形式并将字符串取反
return newString = this.upperLowerCaseReverse(this.reverse(oldString));
}
//交换大小写并返回处理后的字符串
private String upperLowerCaseReverse(String oldString)
{
String str = oldString;
char[] charArray = str.toCharArray();
for(int i=0;i<charArray.length;i++)
{
char ch = charArray[i];
if(ch=='a')
charArray[i] = 'Z';
else if(ch=='A')
charArray[i] = 'z';
else if(Character.isLowerCase(ch)==true)
charArray[i] = (char)(Character.toUpperCase(ch) - 1);//小写英文字符改为大写取其所在字母表中的顺序前面一个字母
else if(Character.isUpperCase(ch)==true)
charArray[i] = (char)(Character.toLowerCase(ch) - 1);//大写英文字符改为小写取其所在字母表中的顺序前面一个字母
else
continue;
}
return String.copyValueOf(charArray);
}
//将给定的英文字符取相反顺序
private String reverse(String str)
{
StringBuilder sb = new StringBuilder(str);
return sb.reverse().substring(0,sb.length());
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2