Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: kuinka monta yhteistä merkkiä kahdessa merkkijonossa

Juuso [28.12.2005 17:03:32]

#

Hei
Teen Javalla sanapeliä, ja tarvitsen siihen metodia joka tutkii kuinka monta yhteistä merkkiä kahdessa merkkijonossa on.

public static int montaOikein(String oikea, String ehdotus) {
		int onko = 0;
		int monta = 0;
		for(int i=0; i<oikea.length(); ++i) {
			onko = ehdotus.indexOf(oikea.charAt(i));
			if(onko >= 0) {
				monta++;
			}
		}
		return monta;

	}

Ylläoleva koodi toimii muuten, mutta esimerkiksi argumentin arvoilla "juupas" ja "jups" palauttaa metodi arvon 5, vaikka sen pitäisi palauttaa vain 4. Osaisiko joku neuvoa, missä mättää?

sooda [28.12.2005 17:09:58]

#

Sanassa "juupas" on u kaksi kertaa, tarkistat sen siis kahdesti tuossa myös. Kannattaa ensin silpoa sana sellaiseksi, ettei siinä ole kahta tai useampaa samaa merkkiä, ja sitte vasta ajaa ton tarkistuksen läpi.

Metabolix [28.12.2005 20:38:34]

#

Varmasti toimiva mutta hidas periaate. Toivottavasti syntaksi on Javaa :)

String merkit = "abcd...åäö"; // Mitä sitten haluatkaan...
int i, j, m, n, maara;

maara = 0;

// Jokainen tarkistettava merkki
for (i = 0; i < merkit.length(); i++)
{
  // Koko sana läpi, lasketaan tämän kirjaimen esiintymät
  for (j = 0; j < oikea.length(); j++) {
    if (oikea.charAt(j) == merkit.charAt(i)) {
      m++;
    }
  }
  // Sama toiselle
  for (j = 0; j < ehdotus.length(); j++) {
    if (ehdotus.charAt(j) == merkit.charAt(i)) {
      n++;
    }
  }

  // Pienempi määrä tätä kirjainta on yhteinen määrä
  if (n < m) {
    m = n;
  }
  maara += m;
}

T.M. [25.01.2006 01:49:15]

#

Jos nyt oikein ymmärsin, niin nopein tapa on laittaa merkit taulukkoon tähän tyyliin, PHP:

<?php

$str1 = "saippoja";
$str2 = "keittoja";
$chr = array(); // taulukon täytyy olla 256 soluinen, ja jokaisen alkion arvo nollaksi
$maara = 0;

$len = strlen($str1);
for($u = 0; $u < $len; $u++){
	$chr[$str1[$u]] = 1;
}

$len = strlen($str2);
for($u = 0; $u < $len; $u++){
	if($chr[$str2[$u]]){
		$maara++;
		$chr[$str2[$u]] = 0;
	}
}

print"$maara";

?>

mod. korjasi T.M.:n ilmoittaman virheen

T.M. [25.01.2006 13:06:09]

#

Mitäs ihmettä? eilen yritin lähettää viestiä monta kertaa, mutta ei vaan lähettänyt, näemmä se lähetti sittenkin viestin, mutta myöhässä. Jes, eikä voi enää muokata viestiä. Sillä tuossa koodissa on virhe, eli siihen täytyy laittaa

$maara++; // tämän jälkeen...
$chr[$str2[$u]] = 0; // tämä

Vastaus

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

Tietoa sivustosta