这是一道数学题,题目是:输入一个整数如6431345;现在由用户输入要删除数的个数如:4.删除6431345里面4个数 要求是就删除4个数以后这个数要是最小的(还是按原来的顺序排只是把要删除的数从中抽出来)。
这道题我已经做好了,程序功能很全面,没有问题,发在20楼..
import java.io.*;
import java.util.*;
public class ShuXueTI {
public static void main( String[] args ) throws IOException {
BufferedReader bfr = new BufferedReader( new InputStreamReader( System.in ));
System.out.println( "请输入一个整数" );
String str = bfr.readLine();
System.out.println( "请输入你要删除的位数" );
int size = Integer.parseInt( bfr.readLine());
while( size >= str.length() ) {
System.out.println( "删除的位数必数小于数的长度,请重新输入" );
size = Integer.parseInt( bfr.readLine());
}
//到这里都不要解释什么吧!
String result = ""; //存放结果的
List vec = new ArrayList(); //创建一个容器,输入的数字转换后的存放的地方
while( size != 0 ) {
for( int i = 0; i <= size; i++ ) { //这里为什么要小于size看到后面就明白了
vec.add( new Integer(str.charAt(i)));
} //存入Integer对象
result += Collections.min(vec).toString(); //取出容器中最小的,并加到结果的字符串中
int a = Collections.min(vec).toString().indexOf(str); //得到这个最小数的位置
size -= a;
if( a != str.length() -1 ) {
str = str.substring( a + 1 ); //去掉这个数前面的那些字符串,加入if是防出界的
}
else {
str = ""; //这是为下面result += str准备的
}
vec.clear(); //清除vec中的元素
}
result += str; //有可能一次就完成了删除工作,就要加出后面那些字符
System.out.println( result );
}
}
编译通过,运行出现错误如下:
请输入一个整数
958746
请输入你要删除的位数
2
java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.charAt(String.java:460)
at ShuXueTI.main(ShuXueTI.java:29)
Exception in thread "main"
PS:图中红色的为第二十九行.
[此贴子已经被作者于2006-8-26 8:16:10编辑过]
----------------解决方案--------------------------------------------------------
能把题目写上来吗?你的表达能力。。。
----------------解决方案--------------------------------------------------------
???我的上面写的不够明白吗?? 刚开始的那不就是题目吗??我现在用红的标出来
你的眼力
[此贴子已经被作者于2006-8-24 17:37:54编辑过]
----------------解决方案--------------------------------------------------------
int a = Collections.min(vec).toString().indexOf(str); //得到这个最小数的位置
应该是
int a = str.indexOf(Collections.min(vec).toString());
逻辑上还有错
第一位不能是最小的数
比如输入123456就报错
654321就不报错
----------------解决方案--------------------------------------------------------
红色的位置应该是
vec.add((str.charAt(i));
----------------解决方案--------------------------------------------------------
红色的位置应该是
vec.add(str.charAt(i));
int a = Collections.min(vec).toString().indexOf(str); //得到这个最小数的位置
应该是
int a = str.indexOf(Collections.min(vec).toString());
逻辑上还有错
第一位不能是最小的数
比如输入123456就报错
654321就不报错
----------------解决方案--------------------------------------------------------
哦 是我粗心了 呵呵 逻辑问题 是我没有运行过一次啊..呵呵
----------------解决方案--------------------------------------------------------
....这怎么可能?? 这样不是一个数了嘛 容器不能放基本类型啊
----------------解决方案--------------------------------------------------------
z108979979你可以运行?? 我怎么还报错.....
先去洗澡吃个饭 晚上再来看./....
[此贴子已经被作者于2006-8-24 17:54:05编辑过]
----------------解决方案--------------------------------------------------------
可以
只要第一位不是最小的数就没问题
----------------解决方案--------------------------------------------------------