najmniejsza wartosc w tablicy

0

witam chciałbym zrobic program ktory wyswietli mi liczbe z tablicy ktora bedzie najblizsza wpisanej .
Mam juz odejmowanie nastepnie wartosc bezwgledna, wyczytalem aby uzyc Math.min ale nie wiem jak

package naj;

import java.io.*;
import java.lang.Math;
/**
 *
 * 
 */

public class Naj {

   int[] moje = {1, 3, 6, 9, 10};

   int[] bliska = new int[5];
    int[] moja = new int[5];

    int a = 3;
    int b;

     public void odejmij(){
    for (int i = 0; i < moja.length;i++)
     { int j=6;
     j=j-j;
        bliska[i] = moje[i] - a;

        bliska[i]= Math.abs(bliska[i]);
       b=Math.min(bliska[i], bliska[j]);

       System.out.println(b); 

    }}

    public static void main(String[] args) {
Naj n= new Naj();
//n.odejmij();
//System.out.println(n.b);

    }
}
0

Pomijając to, że to co stworzyłeś jest po prostu straszne, czym są a, b, j. Co niby robi Twoim zdaniem j = j-j. Po co ci 3 tablice, szczególnie biorąc pod uwagę, że nie wiadomo co one przechowują. Math.min wybiera mniejszą z dwóch liczb, czego tam nie rozumiesz?
Chyba wybrałeś zły dział, wybierz się do działu Newbie.

0

Co to znaczy najblizszej? zakladam ze masz ciąg cyfr np....4, 9, 15, 2 ,7 i teraz wybierasz sbie jakś np 9 najblizsza to tak która wedle indexu lezy najblizej czy jest nablizsza wartośćią? Myśle żechochzi Ci o wartość Dla 9 to np 7 Tak ? dobrze rozumuje? Możesz posortować te liczby, wybrać dany index (9) i porównac który z sasiednich indexow jest blizszy wybrane liczbie. I tu mozesz uzyc odejmowania, prawdzic która z tych 2 liczb ma mniejsz roznice.

Ale może coś zle zrozumiałem.

0

import java.util.Arrays;

public class ArrayUtil {

    public static int findClosestNumberInArray(int[] numbers, int number) {
        if (numbers.length == 0) {
            throw new IllegalArgumentException("Empty array");
        } else if (numbers.length == 1) {
            return numbers[1];
        } else if (numbers.length == 2) {
            return shouldFindNumbersFromLeftToRight(numbers, number) ?
                    numbers[0] : numbers[1];
        }
        int[] sortedNumbers = new int[numbers.length];
        System.arraycopy(numbers, 0, sortedNumbers, 0, numbers.length);
        Arrays.sort(sortedNumbers);
        return shouldFindNumbersFromLeftToRight(sortedNumbers, number) ?
                findClosestNumberFromLeftToRight(sortedNumbers, number) :
                    findClosestNumberFromRightToLeft(sortedNumbers, number);
    }

    private static boolean shouldFindNumbersFromLeftToRight(int[] sortedNumbers, int number) {
        if (sortedNumbers.length <= 3) {
            return getNumbersMatchLevel(sortedNumbers[0], number) <
                getNumbersMatchLevel(sortedNumbers[sortedNumbers.length - 1], number);
        }
        int middleIndex = sortedNumbers.length >> 1;
        return getNumbersMatchLevel(sortedNumbers[middleIndex],number) <
            getNumbersMatchLevel(sortedNumbers[middleIndex + 1], number);
    }

    private static int findClosestNumberFromLeftToRight(int[] sortedNumbers, int number) {
        int currentIndex = 0;
        int currentClosestMatchLevel = Integer.MAX_VALUE;
        for (int i = currentIndex; i < sortedNumbers.length; i++) {
            int matchLevel = getNumbersMatchLevel(sortedNumbers[i], number);
            if (matchLevel == 0) {
                return sortedNumbers[i];
            } else if (matchLevel < currentClosestMatchLevel) {
                currentIndex = i;
                currentClosestMatchLevel = matchLevel;
            } else if (matchLevel > currentClosestMatchLevel) {
                break;
            }
        }
        return sortedNumbers[currentIndex];
    }

    private static int findClosestNumberFromRightToLeft(int[] sortedNumbers, int number) {
        int currentIndex = sortedNumbers.length - 1;
        int currentClosestMatchLevel = Integer.MAX_VALUE;
        for (int i = currentIndex; i > 0; i--) {
            int matchLevel = getNumbersMatchLevel(sortedNumbers[i], number);
            if (matchLevel == 0) {
                return sortedNumbers[i];
            } else if (matchLevel < currentClosestMatchLevel) {
                currentIndex = i;
                currentClosestMatchLevel = matchLevel;
            } else if (matchLevel > currentClosestMatchLevel) {
                break;
            }
        }
        return sortedNumbers[currentIndex];
    }

    private static int getNumbersMatchLevel(int number1, int number2) {
        return Math.abs(number1 - number2);
    }

    public static void main(String[] args) {
        int[] numbers = {1, 100, -2, 0, 11, 5, 7, 102, 177, - 1000, 5000, 200, 15, 16, -1, -100, -1000, -150, -333};

        System.out.println(findClosestNumberInArray(numbers, 101));
        System.out.println(findClosestNumberInArray(numbers, 1));
        System.out.println(findClosestNumberInArray(numbers, -500));

    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0