最近我创建了一个程序,它在数组中包含int并将它们放在另一个数组中,从最大到最小,但是当你插入底片时它不起作用。它打印0而不是负整数。
import java.util.Arrays;
public class g2lArrays2 {
public static void main(String[] args) {
int[] nums = {15,31,7,2,7};
int[] place = new int [nums.length];
int[] definer = new int [nums.length];
int a = 0,b = 0,c;
place[0] = a;
place[1] = 1;
for (int i1 = 0; i1<place.length; i1++) {
for (int i = 0; i<nums.length; i++) {
if (nums[i] > a) {
place[i1]=nums[i];
a=place[i1];
definer[i]=1;
}
}
a = 0;
for (c = definer.length-1; b==0 && c>-1; c--) {
if (definer[c]==1) {
b=c;
}
}
nums[b]=0;
b=0;
for (int i2 = 0; i2<definer.length; i2++) {
definer[i2]=0;
}
}
System.out.println(Arrays.toString(place));
}
}
它起作用,但就像我说的那样,只是没有负整数。所以我很好奇我做错了什么,以及是否有更有效的方法来对这个程序进行排序。所有反馈都表示赞赏。
答案 0 :(得分:0)
好吧我认为FairPlay答案完全是排序数组的最佳方式。那说你问为什么你的代码有问题,这就是我将在这里解释的。
首先,您要打印名为place的数组,因此我只会评论代码涉及该特定数组的位置。
这是代码中影响地点数组的部分:
public static void main(String[] args) {
int[] nums = {15,31,7,2,7};
int[] place = new int [nums.length];
int[] definer = new int [nums.length];
int a = 0,b = 0,c;
place[0] = a;
place[1] = 1;
for (int i1 = 0; i1<place.length; i1++) {
for (int i = 0; i<nums.length; i++) {
if (nums[i] > a) {
place[i1]=nums[i];
a=place[i1];
definer[i]=1;
好的,首先让我们清楚这一点。首先要注意的是正确的识别,并在你认为它是好的时候创建换行符。第二,当创建一个仅在循环中使用的变量或者在for中使用i,j或k时,如果可能的话重复它们(这是我这样做的,它更多的是一个小费而不是规则)。
这是干净的代码:
public static void main(String[] args) {
int[] nums = {15,31,7,2,7};
int[] place = new int [nums.length];
int[] definer = new int [nums.length];
int a = 0,
int b = 0;
place[0] = a;
place[1] = 1;
for (int i = 0; i < place.length; i++) {
for (int j = 0; j < nums.length; j++) {
if (nums[j] > a) {
//first a = 0 just so i remember
//int[] nums = {15,31,7,2,7};
place[i] = nums[j];
a = place[i];
definer[j] = 1;
知道了!问题恰恰在于if。问题在于[n]&gt;一个。显然负数不会通过检查,这就是问题所在。
编辑:好吧,我刚刚意识到我误读了第一个结束的地方(错误的认同),但问题是一样的。你会遇到负数问题,因为你的a和b在每个循环中都设置为0。出现在负数位置的0是因为你在nums数组中添加了b = 0.要解决这个问题,你应该使用array.sort(),因为FairPlay在他的回答中说。试图解决这个问题并不值得。