• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

wyszukiwanie binarne Java

Fiszki IT
Fiszki IT
0 głosów
156 wizyt
pytanie zadane 9 marca 2019 w Java przez mn130496 Gaduła (3,260 p.)

Witam 

Jestem studentem informatyki i ostatnio na laboratoriach z języka Java dostałem takie zadanie:

Posortuj tablicę.Sprawdź, czy w tablicy występuje odczytana z klawiatury wartość. Zastosuj wyszukiwanie binarne.

wzorując się na algorytmie dziel i zwyciężaj  napisałem taki kod:

package lista1;
import java.util.Arrays;
import java.util.Scanner;
public class Zad9 {
    public static void main(String[] args){
        Scanner odczyt = new Scanner(System.in);
        int[] tablicaliczb = {2,1,3,5,4,7,6,10,8,9,13,11,12,16,14,15,19,17,18,22,20,21,25,23,24,27,26,30,28,29};
        int szukanaLiczba, lewo = 0, prawo = tablicaliczb.length - 1, środek = 0;
        System.out.println("Podaj liczbę");
        szukanaLiczba = odczyt.nextInt();
        Arrays.sort(tablicaliczb);
        for (int i = 0; i < tablicaliczb.length; i++){
            System.out.println("tab[" +i+ "]: " +tablicaliczb[i]);
        }
        while (lewo <= prawo) {
            środek = (lewo + prawo) / 2;
            if (tablicaliczb[środek] == szukanaLiczba) {
                System.out.println("szukana liczba jest w tablicy");
                break;
            } else if (tablicaliczb[środek] < szukanaLiczba) {
                lewo = środek + 1;
            } else {
                prawo = środek - 1;
            }
        }
        System.out.println("Szukanej liczby nie ma w tablicy");
    }
}

Niestety nie ten program nie działa do końca tak jak chciałem.Problem polega na tym ,że gdy podam liczbę , która jest w tablicy wyświetli komunikat że jest w tablicy  i jednocześnie wyświetli że nie ma jej w tablicy i nie mogę sobie poradzić z tym problemem. Czy ktoś mógłby mi pomóc? z góry dziękuję za pomoc

pozdrawiam 

1 odpowiedź

0 głosów
odpowiedź 9 marca 2019 przez mbabane Szeryf (79,360 p.)
edycja 9 marca 2019 przez mbabane

Dzieje się tak, ponieważ to:

System.out.println("Szukanej liczby nie ma w tablicy");

umieszczone jest po pętli while, czyli wyświetli się zawsze.

 

Nie deklaruj tak zmiennych:

int szukanaLiczba, lewo = 0, prawo = tablicaliczb.length - 1, środek = 0;

bardzo niewygodnie się to czyta. Rób tak:

int szukanaLiczba;
int  lewo = 0;
int prawo = tablicaliczb.length - 1;
int środek = 0;
komentarz 9 marca 2019 przez mn130496 Gaduła (3,260 p.)
Dobrze dziękuję ci bardzo za pomoc

Podobne pytania

+8 głosów
5 odpowiedzi 997 wizyt
0 głosów
4 odpowiedzi 656 wizyt
pytanie zadane 29 maja 2015 w C i C++ przez fraktal Nowicjusz (200 p.)
0 głosów
1 odpowiedź 118 wizyt
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

84,721 zapytań

133,525 odpowiedzi

295,917 komentarzy

55,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...