程序的任务是取1到100之间的整数并计算它们出现的次数。
例如,用户输入的数字是1 2 2 3 3 25 25 67 98 99 99。 输出为:
final PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
int versionCode;
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
versionCode = (int) pInfo.getLongVersionCode(); // avoid huge version numbers and you will be ok
} else {
//noinspection deprecation
versionCode = pInfo.versionCode;
}
问题
虽然我的程序将成功计算大多数数字,但无法计算两个99,如果我用98代替倒数第二个99,则输出将出现98次2次,但不会计数99。
我已经尝试调试此东西,我不应该说它不计算数组中的最后一个或多个数字,因为它确实可以计数,但是它会在移至else-if语句之前立即跳出。
它似乎跳出来了,因为第一个if语句为true,因此不需要转到else,它就完成了循环,但弄清楚如何使它仍然打印最后一个数字,这使我感到困惑。 / p>
这是代码。问题出在LinearSearch()方法中:
1 occurs 1 time
2 occurs 2 times
3 occurs 2 times
25 occurs 2 times
67 occurs 1 time
98 occurs 1 time
答案 0 :(得分:1)
问题是您错过了最后一个数字的迭代。
public class Job8 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int usernumbers[] = new int[20];
int size = usernumbers.length;
System.out.println("Enter integers between 1 and 100, " + "enter a 0 to end ");
// user populates the array usernumbers
int i = 0;
do {
usernumbers[i] = input.nextInt();
} while (usernumbers[i++] != 0);
// invokes the method to sort the array
arraySort(usernumbers);
System.out.println(java.util.Arrays.toString(usernumbers));
// this invokes the method to search the array for the numbers
linearSearch(usernumbers);
input.close();
}
public static void arraySort(int[] usernumbers) {
// bubblesort for usernumbers[]
int a = usernumbers.length;
for (int i = 0; i < a - 1; i++) {
for (int j = 0; j < a - i - 1; j++) {
if (usernumbers[j] > usernumbers[j + 1]) {
int temp = usernumbers[j];
usernumbers[j] = usernumbers[j + 1];
usernumbers[j + 1] = temp;
}
}
}
}
public static void linearSearch(int[] usernumbers) {
int count = 0;
int currentNumber = 0;
for (int i = 0; i < usernumbers.length; i++) {
int nextIndex = i + 1;
currentNumber = usernumbers[i];
if (currentNumber == 0) {
continue;
}
if (nextIndex < usernumbers.length) {
int nextNumber = usernumbers[nextIndex];
if (currentNumber == nextNumber) {
count++;
continue;
} else {
if (count == 0) {
System.out.println(currentNumber + " occurs once");
} else {
System.out.println(currentNumber + " occurs " + count + " times");
count = 0;
}
}
}
}
System.out.println(+currentNumber + " occurs " + (count + 1) + " times");
}
}
答案 1 :(得分:0)
欢迎来到SO。
恐怕您已经完全误解了代码中的问题。问题在于,对数组进行排序时,会将所有零值移到最前面。当您要打印linearSearch
中的事件时,您假定存在尾随零以强制打印最终值。这应该是相对容易解决的问题,但是如果您需要提示,请在评论中问我一个问题。