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."); } } } }
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");
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??
Joo, laita vaan simppelisti:
int indeksi = lista.indexOf(luku);
Kiitos!
Noinhan se tietysti yksinkertaisesti toimii!
Oikein paljon kiitoksia neuvosta!
t: Ivanka
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"
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?
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)
Aihe on jo aika vanha, joten et voi enää vastata siihen.