Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Kysytyn luvun indeksi (Mooc-tehtävä)

Sivun loppuun

Ivanka [30.01.2017 02:23:07]

#

Tehtävä on

"Ohjelmaan on toteutettu valmiina pohja, joka lukee käyttäjältä lukuja listalle. Syötteiden lukeminen päätetään kun käyttäjä syöttää luvun -1.

Lisää ohjelmaan toiminnallisuus, joka kysyy käyttäjältä lukua ja kertoo luvun indeksin. Jos lukua ei löydy, tulee siitä ilmoittaa erikseen (vihje: contains!)."

Pyydän siis apua seuraavaan: en ymmärrä miten saan ohjelman tulostamaan käyttäjän antaman luvun indeksin!
Olen miettinyt tehtävää jo kolme päivää tuloksetta...

import java.util.ArrayList;
import java.util.Scanner;

public class KysytynLuvunIndeksi {

    public static void main(String[] args) {
        Scanner lukija = new Scanner(System.in);

        ArrayList<Integer> lista = new ArrayList<>();
        while (true) {
            int luettu = Integer.parseInt(lukija.nextLine());
            if (luettu == -1) {
                break;
            }

            lista.add(luettu);
        }

        System.out.println("");

        // toteuta tänne toiminnallisuus luvun etsimiseen

        System.out.println("Mitä etsitään?");

        while (true) {
            int luku = Integer.parseInt(lukija.nextLine());
            int indeksi = lista.get(luku);

            if (lista.contains(luku)) {
                System.out.println("Luku " + luku + " on indeksissä " + indeksi);
                break;
            } else {
                System.out.println("Lukua " + luku + " ei löydy.");
            }
        }








    }
}

TapaniS [30.01.2017 09:03:01]

#

Tähän varmaan voisi löytyä parempiakin tapoja, mutta itse tekisin esim. oheisella tavalla:

  for (int i = 0; i < lkm; i++) {
    if (lista[i] == luku) {
	   indeksi = i;
	   break;
	}
  }

No joo ... Googlasin vähän ja tulikin heti tämmöinen vastaan:

int pos = obj.indexOf("Tom");

Ivanka [30.01.2017 13:44:33]

#

Hei,

Kiitos vastauksestasi!

Miten asia hoituisi jos saan käyttää tässä vaiheessa vain komentoja while, else ja if?

En millään ymmärrä tämän tehtävän logiikkaa ;(

Esimerkki tuloste: luvut 72, 2, 8, 8, 11 ja -1.
Tämän jälkeen ohjelma kysyy mitä etsitään esimerkiksi arvolla 2, ohjelma tulostaa 8.
Kaikilla muilla edellä mainituilla luvuilla tuloste on indexOutofBounds tai "lukua ei löydy".

Jos vaihdan kohdan indeksin määritelmän:

int indeksi = 0;

Kaikki luvut antaa tulokseksi indeksi paikan 0.
Miten määrittelen int indeksi??

TapaniS [30.01.2017 15:26:01]

#

Joo, laita vaan simppelisti:

int indeksi = lista.indexOf(luku);

Ivanka [30.01.2017 20:42:36]

#

Kiitos!

Noinhan se tietysti yksinkertaisesti toimii!

Oikein paljon kiitoksia neuvosta!

t: Ivanka

TapaniS [31.01.2017 08:17:40]

#

Nuo aikaisemmat "out of index" -ilmoitukset varmaan korjaantuvat, jos lkm määritellään listan elementtien lukumäärän mukaiseksi:

int lkm = lista.size();

Olisi pitänyt siis toimia myös for -loopin avulla.

Nämä ArrayList -ohjeet löysin sivulta: ArrayList


Terveisin,
"Google -koodari"

morty [12.02.2017 19:22:18]

#

Itse painisin saman ongelman kanssa, aika jännä että vaaditaan käyttämään "indexOf" komentoja, vaikka sitä ei ole vielä kurssilla käsitelty. Kyseisssä tehtävässä pitää myös kertoa kaikki indeksit missä kysytty luku esiintyy. Miten tämä tehdään?

Grez [13.02.2017 00:42:51]

#

Eihän siinä mikään pakko ole indexOf -komentoa käyttää. Voithan käydä taulukon läpi loopissa ja tulostaa siinä kunkin indeksin, jossa luku esiintyy. TapaniS ensimmäinen esimerkki mutta tulostat tuon i:n etkä breakkaa (heti ensimmäisen jälkeen)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta