Unë jam duke ecur mirë në këtë program, por ndërsa kam përparuar, me sa duket kam bërë disa gabime logjike që janë të vështira për t'u gjetur dhe kanë nevojë për ndihmë. Unë kam metoda që renditin grupin nga më i vogli tek më i madhi. Sa herë që printoj numrin më të vogël në ekran, ai gjithmonë e tregon atë numër si 0 edhe nëse nuk kam shtypur asnjë zero. Mund të marr numrin më të lartë të saktë, përveç rastit kur përdoruesi fut sasinë maksimale të numrave, atëherë ai printon numrin e dytë më të lartë. Ndonjëherë marr rezultatin e saktë për mesataren, por kurrë nuk marr rezultatin e saktë për mesataren. Çdo ndihmë vlerësohet shumë! Ndjehem sikur jam afër kodit të saktë, por këto gabime po më bëjnë një kohë të vështirë.
public static Scanner kbd = new Scanner(System.in);
public static void main(String[] args) {
//change to 100 when done testing
final int MAXSIZE = 10;
int[] nums = new int [MAXSIZE];
int usedSize, indexOfNextSmallest = 0;
double median, average;
System.out.println("Please enter each number starting from least to greatest(a negative number will quit input): ");
usedSize = getNums(nums);
for (int index = 0; index < nums.length -1; index++) {
indexOfNextSmallest = getIndexOfSmallest(index, nums);
interchange(index, indexOfNextSmallest, nums);
}
median = medians(nums);
average = averages(nums);
System.out.println("The smallest number entered is " + nums[0] + ".");
System.out.println("The largest number entered is " + nums[nums.length-1] + ".");
System.out.println("The median is: " + median);
System.out.println("The average is: " + average);
}
public static int getIndexOfSmallest(int startIndex, int[] nums) {
int min = nums[startIndex];
int indexOfMin = startIndex;
for (int index = startIndex +1; index < nums.length; index++) {
if (nums[index] < min) {
min = nums[index];
indexOfMin = index;
}
}
return indexOfMin;
}
private static void interchange(int index, int indexOfNextSmallest, int[] nums) {
int temp = nums[index];
nums[index] = nums [indexOfNextSmallest];
nums[indexOfNextSmallest] = temp;
}
public static int getNums(int nums[]) {
int usedSize = 0, userValue = 0;
while(userValue >= 0 && usedSize < nums.length) {
nums[usedSize] = userValue;
userValue = kbd.nextInt();
usedSize++;
}
if(!(userValue >= 0)) {
--usedSize;
System.out.println(usedSize + " numbers entered.");
}
else if(!(usedSize < nums.length)) {
System.out.println("Maximum amount of inputs (" + nums.length + ") reached.");
}
return usedSize;
}
public static double medians(int nums[]) {
double median;
if (nums.length % 2 == 0)
median = ((double)nums[nums.length / 2] + (double)nums[nums.length / 2 - 1]) / 2;
else
median = (double)nums[nums.length / 2];
return median;
}
public static double averages(int nums[]) {
double average;
int sum = 0;
for (int index = 0; index < nums.length; index++){
sum = sum + nums[index];
}
average = ((double)sum / (double)nums.length);
return average;
}
} Ky është dalja që marr nëse fut 1, 2, 3, 4, 5, -7 (negativi është ndalimi i hyrjes së përdoruesit (mund të jetë problem?))
Please enter each number starting from least to greatest(a negative number will quit input):
1 2 3 4 5 -7
5 numbers entered.
The smallest number entered is 0.
The largest number entered is 5.
The median is: 0.5
The average is: 1.5
Përgjigjet që duhet të marr me kodin e saktë janë 1, 5, 3.0 dhe 3.0
Faleminderit përsëri për çdo ndihmë.