Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Javassa taulukkoon lisääminen

jannu82 [01.05.2006 11:44:10]

#

minulle on annettu seuraavanlainen tehtävä tai metodit tehtävään:

Int [ ] numbers: an array of integers
size, maxsize: the current size and maximum size of the array (i.e. number of items)

The class contains the following methods:

IntArray(int maxsize): constructor
add(int number): adds a number to the array
sum(): returns the sum of numbers
print(): prints the values stored in the array
miten saan laskettua taulukon alkioiden summan??
alapuolella tekemääni koodia

class Intarray
{
	int numbers[]; //new int[3];
	int size;
	int maxsize=5;

	public  Intarray(int maxsize)
	{
		//setsize(maxsize);
		this.maxsize = maxsize;
		numbers = new int[maxsize];
		//numbers[] = new int [];
		//this.numbers[] = numbers[];
	}


	public void add(int number)
	{
		//for (number=0;number< numbers.length ;++number )
		//{
			numbers[size]+= number;
		//}
		//this.numbers = numbers[number];
	}

	public void setsize(int size)
	{
		//if (size<=maxsize)
		this.numbers[maxsize] = numbers[size];
	}

/*	public void setmaxsize(int maxsize)
	{

		this.maxsize = maxsize;
	}*/

	/*public int sum()
	{
		for (int i=0;i<=numbers.length ;i++ )
		{//for (int j=0;j<=Intarray.length ;j++ )

			numbers[i-1]=i+i;
			System.out.println(numbers[i-1] +" ");
		}
	}*/

	public void print()
	{
		System.out.println(this.numbers[size]);
		System.out.println(this.numbers.length + " ");
	}

}


public class  arraytesti
{
	public static void main(String[] args)
	{
		Intarray numbers = new Intarray();
		numbers.setsize(4);
		numbers.print();
		numbers.add(1);
		numbers.print();

	}
}

FooBat [01.05.2006 13:27:02]

#

Näyttää, että tosiaa hiukan avun tarpeessa. Ainoastaan constructorisi sisältää tällä hetkellä järkevää koodia.

Sinullahan on tässä tehtävänä tehdä maxsize-muuttujan kokoinen taulukko, jossa on size määrä arvoja sisällä. Eli aina kun lisäät arvon taulukkoon, lisäät sen kohtaan, jossa ei vielä ole arvoa (eli taulukon kohtaan size). Samalla sinun pitää kasvattaa taulukossa olevien lukujen määrää (size++). Tämänhetkisessä koodissa se for silmukka on ihan turha ja size arvoa ei kasvateta. Jos taulukossa on jo maxsize arvoa, et voi enää lisätä sinne arvoja (tämä pitää tarkistaa ja ehkä heittää keskeytys tai jättää lisäys tekemättä).

Setsize metodissa et tee tällä hetkellä oikein mitään. (Yrität asettaa taulukon indeksiä maxsize samaan kohtaan taulukossa. Tämä aiheuttaa lisäksi virheen, koska maxsize kokoisessa taulukossa suurin indeksi on maxsize-1.) Tässä pitäisi tehdä uuden koon kokoinen uusi (new!) taulukko ja kopioida vanhasta taulukosta arvot uuteen taulukkoon. Tarvitset toiselle taulukolle funktion sisälle oman muuttujan, että voit suorittaa kopioinnin. Lopuksi asetat numbers taulukon uudeksi taulukoksi sijoituksella.

maxsize = newsize;
int[] tmparray = new int[newsize];
for (int i = 0; i < size && i < tmparray.length; i++)
  //kopiointi; //todo
numbers = tmparray;

Sum-metodissa joudut käymään käymään koko taulukon alkio kerrallaan läpi ja lisäämällä arvot johonkin int-apumuuttujaan. Eli teet for-silmukan, joka käy alkiot läpi kokoon size asti lisää kunkin alkion johonkin tiettyyn muuttujaan. Taulukon tietyn alkion arvon saa ulos tyyliin numbers[indeksi] (indeksi voi olla muuttuja tai ei).

Print metodissa on hiukan sama ongelma kuin sum-metodissa. Eli tarvitset for-silmukan, jossa käydään läpi arvot 0-(size-1) ja tulostetaan ne. Nyt yrität tulostaa vain yhtä taulukon indeksiä (size). Tuota this-osoitinta ei tarvitse käyttää, ellei parametrina tulevat muuttujat ole saman nimisiä kuin luokan sisäiset muuttujat.


Suosittelen, että lueskelet jostain tutoriaalista ihan javan perusrakenteita kuten taulukkojen toimintaa ja silmukoiden toimintaa.

jannu82 [01.05.2006 16:18:33]

#

koodi on ny tämmönen, toimii paitti toi summa pitäs viel saada semmoseks et laskee alkioiden arvot...

class Intarray
{
	int numbers[];
	int size;
	int maxsize;
	int summa;

	public  Intarray(int maxsize)
	{

		this.maxsize = maxsize;
		numbers = new int[maxsize];


	}


	public void add(int number)
	{


			if (size<maxsize)

			numbers[size]+= number;

	}

public void syota()
	{
	for (int n=0;n<numbers.length ;++n )
		{
			System.out.println("annaluku: "+(n+1));
			numbers[n]=Lue.kluku();
			numbers[size]=numbers[n];
		}

		System.out.println(" ");
	}

	public int sum()
	{
		for (int n=0;n<numbers.length ;n++ )
				numbers[size]=numbers[n];
				 summa=numbers[size]+numbers[size];

		return summa;
	}


	public void print()
	{
		System.out.println(numbers[size]);
		for (int n=0;n<=numbers.length ;++n )
		numbers[size]=n;
		System.out.println(numbers[size]);
		System.out.println(numbers[maxsize-1]);

		System.out.println(summa);


	}

}


public class  arraytesti
{
	public static void main(String[] args)
	{
		Intarray numbers = new Intarray(10);

		//numbers.print();
		numbers.syota();
		numbers.add(5);
		numbers.sum();
		numbers.print();

	}
}

FooBat [02.05.2006 00:36:25]

#

Lueppas vaikka vähän perusteita silmukkarakenteista ja taulukoista täältä
http://javala.cs.tut.fi/show.do?category­=kielen_perusteet
Tälläisten yksinkertaisten tehtävien tarkoitus on, että opiskelijat itse opiskelevat perusasiat ja sitten joutuvat käyttämään niitä, jotta he ymmärtävät miten ne toimivat. Nyt näyttää, että sinulta on jäänyt opiskelu tai tiettyjen asioiden ymmärtäminen vähän puutteelliseksi. Tämä on myös syy, minkä takia suoria vastauksia koulutehtäviin ei yleensä jaeta.


Tuossa add-metodissa pitäisi varmaan käyttää sijoitusta (=) summan (+=) sijaan ja size muuttujaa pitäisi kasvattaa yhdellä sijoituksen jälkeen. Epäilen myös, että sinun pitää tehdä syota-metodia käyttäen add-metodia.

Summa-metodissa sijoitat nyt taulukon viimeisen luvun paikalle kaikki taulukon luvut vuorotellen ja sitten asetat summaksi kaksi kertaa viimeinen sijoitettu luku. Eihän tuossa ole mitään järkeä. Eli korjaus on sellainen, että

1. Käyt luvut läpi vain arvoon size asti.
2. Lisäät summa-muuttujaan jokaisen alkion arvon. (summa += ...). Alkion arvonhan saat tyyliin numbers[n]. Tämä siis for-silmukan sisällä.
3. Summa-muuttuja kannattaa varmaan olla sum-metodin sisäinen muuttuja eli määritelty sen sisällä.

int sum() {
  int summa = 0;
  ... //tässä lasket summan
  return summa;
}

Vastaus

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

Tietoa sivustosta