s=0; 数组长度为0,循环判定 i <= -1 从一开始就不成立。 后面就都出错了你把s赋值成5或者6,7,8
我在main里改s的值,这样不行吗?
main里修改s.不会影响已经初始化好的数组
程序是先执行静态的变量或静态快,然后才进入main()函数的。
--------------------Configuration: <Default>-------------------- 数组的大小在编译时就已经决定了,应该推迟到运行时根据用户输入决定数组大小,请看我的部分 //package gui; import java.util.*; // for Scannerpublic 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.
我修改后的程序如下://package gui; import java.util.*; // for Scannerpublic 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 + " <= "); } } } 不过我搞不明白如何让数组为类的数据成员,大小又可以动态决定,望有高手来解决!
static int[] nums new int[5];
数组 个数 为 0 个 ,楼主 你有 才啊
数组长度为0,循环判定 i <= -1 从一开始就不成立。
后面就都出错了你把s赋值成5或者6,7,8
程序是先执行静态的变量或静态快,然后才进入main()函数的。
数组的大小在编译时就已经决定了,应该推迟到运行时根据用户输入决定数组大小,请看我的部分
//package gui; import java.util.*; // for Scannerpublic 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.
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 + " <= ");
} }
}
不过我搞不明白如何让数组为类的数据成员,大小又可以动态决定,望有高手来解决!