» »

Java problemček

Java problemček

pajac ::

LP!
enostaven programček za praštevila.Imam dva problemčka:
1. prevajalnik mi javi da ne najde spremenljivke STEV, ki je definirana v metodi MAIN().
2. kako dopovedat programu naj stevilo deli smo s sabo?? (probal sem z THIS.STEV)

/*
* Prastevila
*/
public class PraStevila {
// pogojna metoda
boolean Pogoji() {
// 1. pogoj
if (stev % 1 == 0) {
return true;
}
if (stev % 2 == 0) {
return false;
}
if (stev % this.stev == 0) {
return true;
}
if (stev < = 2) {
return stev == 2;
}
return true; // vrni resnične
}
public static void main (String[] argv) {
// spremenljivke
int ZG_meja = 40;
int SP_meja = 3;
int stev;

for (stev = SP_meja; stev < = ZG_meja; stev++)
System.out.println("Prastevila med "+ SP_meja +" in "+ ZG_meja +"so: "+ stev);
}
}
Za odgovore bom zelo hvaležen.

Seadoo ::

Stev je definirana v Main metodi, vendar jo uporabljaš tudi v funkciji Pogoji(). Ne vem kaj si hotu s to funkcijo sploh naredit.

Če pogledaš samo tvojo main funkcijo - izpiše ti vsa števila med spodnjo in zgornjo mejo, nikakor pa ne vseh praštevil. V for zanki moreš dodat en if stavek, v katerem preveriš. ali je število res praštevilo in če je, ga izpišeš.

LeQuack ::

Se en drugacen pristop:

public class Prastevila
{
public static void main(String[] args)
{
byte spMeja=10, zgMeja=30, s=0, stevilo, delitelj; //inicializacija spremenljivk
System.out.print("Prastevila med "+spMeja+" in "+zgMeja+" : ");
for (stevilo=spMeja; stevilo< =zgMeja; ++stevilo) //zanka za stevila med 10 in 30
{
byte vsota=0; //inicializacija zacasne vsote za izracun prastevila
for (delitelj=2; delitelj< =stevilo; ++delitelj) //zanka za delitelja
{
if (stevilo%delitelj==0) //pri ostanku 0
vsota+=delitelj; //dodaj k vsoti delitelja
if (vsota==stevilo) //ce je vsota enaka stevilu, je to prastevilo, ker je deljivo samo s samim sabo
{
System.out.print(stevilo+" ");
s+=stevilo;
}
}
}
System.out.println();
System.out.println("Vsota praštevil : "+s);
}
}

Zgodovina sprememb…

  • spremenil: LeQuack ()

Seadoo ::

Še ena hitra optimizacija: v zgornji for zanki ni potrebno pregeldat vseh števil do 'števila', ampak le do njegovega korena. Ne vem točno kako je to v Javi, recimo stevilo.root.

Torej namesto
for (delitelj=2; delitelj< =stevilo; ++delitelj)
je dovolj
for (delitelj=2; delitelj< =stevilo.root; ++delitelj)

LeQuack ::

Ja mas prov, zgledal bi pol:
for (delitelj=2; delitelj< =Math.sqrt(stevilo); ++delitelj)

pajac ::

Vidva sta vsekakor legende (še žive seveda).
To rešitev (da je število deljivo samo s sabo) sem iskal kar nekaj časa.
Glede na to da sem začetnik, se še kaj oglasim, upam da vidva tudi.

TNX!:D


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

python-rabim pomoč

Oddelek: Programiranje
162736 (966) rnla1973
»

Naloga iz Putka - UPM

Oddelek: Programiranje
242183 (1519) NejcSSD
»

Python - problem

Oddelek: Programiranje
132762 (2492) slevin
»

[Java] programiranje "praštevila"

Oddelek: Programiranje
72518 (2396) blaz_
»

Svetujte mi en spodoben editor za programiranje!

Oddelek: Programiranje
161767 (1407) mainman

Več podobnih tem