| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1517 人关注过本帖
标题:[讨论]我这个是哪里越界了
取消只看楼主 加入收藏
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
收藏
 问题点数:0 回复次数:9 
[讨论]我这个是哪里越界了

这是一道数学题,题目是:输入一个整数如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编辑过]

搜索更多相关主题的帖子: 越界 java import public 
2006-08-24 15:27
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
收藏
得分:0 

???我的上面写的不够明白吗??  刚开始的那不就是题目吗??我现在用红的标出来
你的眼力

[此贴子已经被作者于2006-8-24 17:37:54编辑过]


一个人的快乐,不是因为他拥有的多,而是因为他计较的少.
2006-08-24 17:35
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
收藏
得分:0 
哦  是我粗心了  呵呵  逻辑问题  是我没有运行过一次啊..呵呵  

一个人的快乐,不是因为他拥有的多,而是因为他计较的少.
2006-08-24 17:41
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
收藏
得分:0 
....这怎么可能??  这样不是一个数了嘛  容器不能放基本类型啊

一个人的快乐,不是因为他拥有的多,而是因为他计较的少.
2006-08-24 17:45
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
收藏
得分:0 
z108979979你可以运行??  我怎么还报错.....
先去洗澡吃个饭  晚上再来看./....

[此贴子已经被作者于2006-8-24 17:54:05编辑过]


一个人的快乐,不是因为他拥有的多,而是因为他计较的少.
2006-08-24 17:52
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
收藏
得分:0 

我不知道你是怎么运行的  我现在改了一下代码  有很重要的变动(不是很大的变动)  不知道那个你怎么能运行的....

至于你说的问题只要把
result += str;  
System.out.println( result );
换成
if( result.length() != str.length() - size )
result += str;
System.out.println( result );
这样就没问题了

[此贴子已经被作者于2006-8-24 22:31:57编辑过]


一个人的快乐,不是因为他拥有的多,而是因为他计较的少.
2006-08-24 22:21
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
收藏
得分:0 
vec1.add(str.charAt(i));
不要看首先这句就通不过去  还运行呢 晕  一个是基本类型一个是容器  (我的QQ:346550082)我们可以讨论下啊..呵可 交个朋友

[此贴子已经被作者于2006-8-25 14:39:14编辑过]


一个人的快乐,不是因为他拥有的多,而是因为他计较的少.
2006-08-25 14:36
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
收藏
得分:0 
不会吧  我去运行下

运行了 报错  我的代码也改好了

[此贴子已经被作者于2006-8-25 15:20:02编辑过]


一个人的快乐,不是因为他拥有的多,而是因为他计较的少.
2006-08-25 15:18
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
收藏
得分:0 
ArrayList也是LIST的一种啊
可是在我这就运行不起来...

[此贴子已经被作者于2006-8-25 16:20:33编辑过]


一个人的快乐,不是因为他拥有的多,而是因为他计较的少.
2006-08-25 16:17
wxhwjsw
Rank: 1
等 级:新手上路
帖 子:274
专家分:0
注 册:2006-6-15
收藏
得分:0 

我把我的代码帖上来  这个是我测试过N次 没有BUG的:
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();
int size = str.length(); //你输入的数的长度
System.out.println( "请输入你要删除的位数" );
int desize = Integer.parseInt( bfr.readLine());
while( desize >= str.length() ) {
System.out.println( "删除的位数必数小于数的长度,请重新输入" );
desize = Integer.parseInt( bfr.readLine());
}
String result = "";
List vec = new ArrayList();//声明一个容器.困为他有min方法
while( desize != 0 ) {
for( int i = 0; i <= desize; i++ ) {
vec.add( i, String.valueOf( str.charAt(i)) );//替换原来的成员,不然是加到后面
}
vec = vec.subList( 0, desize+1 );//去掉后面的成员
result += Collections.min(vec);
int a = str.indexOf( Collections.min(vec).toString() );//取得刚才得到的数的位置
desize -= a ;//已经去掉了几位,还有几位
if( a != str.length() -1 ) {
str = str.substring( a + 1 );
}
else {
str = "";//如果是取到最后一位,就没有了
break;
}
if( result.length() == size - desize )
break;
}
if( result.length() != size - desize )
result += str;//不好解释要自已去理解
System.out.println( result );
}
}

[此贴子已经被作者于2006-8-25 16:22:45编辑过]


一个人的快乐,不是因为他拥有的多,而是因为他计较的少.
2006-08-25 16:21
快速回复:[讨论]我这个是哪里越界了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042895 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved