大伙帮我看看这个小程序的问题!!

一名普通程序员 2010-01-23 04:46:09
大伙帮我看看这个小程序的问题:
如果我把里面的5改成s了怎么就不能运行了呢???
package gui;

import java.util.*;

public class G {
public G() {
// TODO Auto-generated constructor stub
}

static int s = 0;
static int[] nums = new int[5]; // 这里的5改成s------------------------------------------
static Scanner input = new Scanner(System.in);
// 做个从小到大排序的程序
public static void arr() {
// 数据输入处理中
for (int i = 0; i <= 5-1; i++) { // 这里的5改成s------------------------------------------
if (i == 0) {
System.out.println("请输入你要排序的数据:");
}
if (i > 0) {
if (i == 5-1) {// 这里的5改成s------------------------------------------
System.out.println("这是最后一个数据了!!!");

}
System.out.println("请再次输入你要排序的数据:");

}
int num = input.nextInt();
nums[i] = num;
}
// 数据正以升序排序中^^------------------------------------
for (int m = 1; m <= nums.length; m++) {
for (int j = 0; j < nums.length - m; j++) {
if (nums[j] > nums[j + 1]) {
int mid = nums[j + 1];
nums[j + 1] = nums[j];
nums[j] = mid;
}

}
}
for (int x : nums) {
System.out.print(x + " <= ");
}

}
public static void main(String[] args) {
input = new Scanner(System.in);
System.out.println("请先输入你要输入的数据总数!!:");
int sum = input.nextInt();
s = sum;
arr();
}

}
...全文
128 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jie__z 2010-01-23
  • 打赏
  • 举报
回复
我修改后的程序如下:

//package gui;

import java.util.*; // for Scanner

public class aBubleSort {
public aBubleSort() {
// TODO Auto-generated constructor stub
}

static int s = 0 ;
static Scanner input = new Scanner(System.in);


public static void main(String[] args) {
System.out.println("请先输入你要输入的数据总数!!:");
s = input.nextInt();
bubleSort();
}


static void bubleSort(){ //用冒泡排序法排序输入数组
int[] nums = new int[s]; //在排序函数里建一个动态数值,不过数组是局部的只在函数内部可见
System.out.println("请输入你要排序的数据:");
for (int i = 0; i <= s-1; i++) {
int num = input.nextInt();
nums[i] = num;
if (i == s-1){
System.out.println("这是最后一个数据了!!!");
}

else {
System.out.println("请输入你要排序的下一个数据:");
} //这样是不是比用多重if嵌套简洁多了,只不过用了一个if -else语句^_^

}
for (int m = 1; m <= s; m++) {
for (int j = 0; j < s - m; j++) {
if (nums[j] > nums[j + 1]) {
int mid = nums[j + 1];
nums[j + 1] = nums[j];
nums[j] = mid;
}

}
}
for (int x : nums) {
System.out.print(x + " <= ");
}

}
}


不过我搞不明白如何让数组为类的数据成员,大小又可以动态决定,望有高手来解决!
jie__z 2010-01-23
  • 打赏
  • 举报
回复
--------------------Configuration: <Default>--------------------
数组的大小在编译时就已经决定了,应该推迟到运行时根据用户输入决定数组大小,请看我的部分


//package gui;

import java.util.*; // for Scanner

public class G {
public G() {
// TODO Auto-generated constructor stub
}

static int s =0;





static int[] nums = new int[s]; //数组的大小在编译时已经,而应该在运行时根据用户的输入动态决定
static Scanner input = new Scanner(System.in);
// 做个从小到大排序的程序
public static void arr() {
// 数据输入处理中
for (int i = 0; i <= s-1; i++) { // 这里的5改成s------------------------------------------
if (i == 0) {
System.out.println("请输入你要排序的数据:");
}
if (i > 0) {
if (i == s-1) {// 这里的5改成s------------------------------------------
System.out.println("这是最后一个数据了!!!");

}
System.out.println("请再次输入你要排序的数据:");

}
int num = input.nextInt();
//System.out.println("nums[i]="+nums[i]);
System.out.println("num="+num);
nums[i+1] = num;
}
// 数据正以升序排序中^^---------------------------------6
//---
for (int m = 1; m <= s; m++) {
for (int j = 0; j < s - m; j++) {
if (nums[j] > nums[j + 1]) {
int mid = nums[j + 1];
nums[j + 1] = nums[j];
nums[j] = mid;
}

}
}
for (int x : nums) {
System.out.print(x + " <= ");
}

}
public static void main(String[] args) {
//input = new Scanner(System.in);
/*input 已经是类中的一个static的Scanner类型的对象的引用,
*这里不必再给它赋另一个新的对象引用
*/
System.out.println("请先输入你要输入的数据总数!!:");
int sum = input.nextInt();
System.out.println("s="+s); //打印s被赋值前的值
s = sum;
System.out.println("s="+s);//打印s被赋值后的值
System.out.println("array size="+nums.length );//打印数组的大小

arr();
}

}


运行结果
请先输入你要输入的数据总数!!:
8
s=0
s=8
array size=0
请输入你要排序的数据:
6
num=6
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at G.arr(G.java:36)
at G.main(G.java:66)

Process completed.
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 nihaozhangchao 的回复:]
引用 3 楼 zax0zax 的回复:
我在main里改s的值,这样不行吗?


程序是先执行静态的变量或静态快,然后才进入main()函数的。
[/Quote]
要的就是这个.哈哈,谢谢啦.
当然也要谢谢楼上楼下的各位好心的朋友啦!
我想到一个更好的法子了,不会写入数据个数了
baifenghan 2010-01-23
  • 打赏
  • 举报
回复
我试了下,没有问题,不知道楼主所说
SambaGao 2010-01-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zax0zax 的回复:]
我在main里改s的值,这样不行吗?
[/Quote]

程序是先执行静态的变量或静态快,然后才进入main()函数的。
zishanyan 2010-01-23
  • 打赏
  • 举报
回复
在S为0肯定会报错的情况下,初始化s的值就不要再为0了,至少也放个1嘛
「已注销」 2010-01-23
  • 打赏
  • 举报
回复
main里修改s.不会影响已经初始化好的数组
  • 打赏
  • 举报
回复
我在main里改s的值,这样不行吗?
「已注销」 2010-01-23
  • 打赏
  • 举报
回复
s=0;
数组长度为0,循环判定 i <= -1 从一开始就不成立

。。。。
后面就都出错了

你把s赋值成5或者6,7,8
amdgaming 2010-01-23
  • 打赏
  • 举报
回复

static int[] nums new int[5];
数组 个数 为 0 个 ,楼主 你有 才啊

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧