» »

Pomoč pri pisanju programa v JAVI

Pomoč pri pisanju programa v JAVI

konan5 ::

Potrebujem pomoč pri pisanju programa. Namreč koda deluje normalno, vendar ko jo testiram (datoteko s testi smo dobili v šoli) mi javi napako med izvajanjem. Pomoje tudi koda ni uredu napisana, zato bi prosil za kakšen nasvet kako jo lahko izboljšam. Naloga se pa glasi: Napišite program, ki prebere pozitivni celi števili a in b in izpiše, koliko števil med
vključno a in vključno b je deljivih s katerimkoli izmed števil 2, 3 ali 5.

Hvala :)


import java.util.Scanner;
class Veckratniki {
	public static void main (String[] args) {
	Scanner sc = new Scanner(System.in);
	
		long a=sc.nextLong();
		long b=sc.nextLong();
		long rezultati=0;
		
		for (long v = a; v <= b; v++) {
			if (v%2==0){
			rezultati++;
			}
			else if (v%3==0){
			rezultati++;
			}
			else if (v%5==0){
			rezultati++;
			}
			else if (v%2==0 && v%3==0){
			rezultati--;
			}
			else if (v%2==0 && v%5==0){
			rezultati--;
			}
			else if (v%3==0 && v%5==0){
			rezultati--;
			}
			else if (v%2==0 && v%3==0 && v%5==0){
			rezultati++;
			}
		}
		System.out.println(rezultati);
	}	
}

Mavrik ::

Nasvet: Preberi napako. Tam piše kaj je narobe. Glede na to kako je sestavljen tvoj post sploh nisi a ne?
The truth is rarely pure and never simple.

mgermo ::

Nevem zakaj nebi uporabil ||

galu ::

Namesto tistih narobe spisanih if / else if špagetov, dej to:

        if (v != 0 && (v%2 == 0 || v%3 == 0 || v%5 == 0))
        {
            rezultati++;
        }


P.S. V obzir vzemi tudi primer, ko je a večji od b.
Tako to gre.

Zgodovina sprememb…

  • spremenil: galu ()

konan5 ::

Mavrik sem še začetnik v programiranju tako, da mi ta napaka ne pove veliko kaj je narobe.
Probal sem tudi s kodo (spodaj), ampak dobim ven isto napako?
import java.util.Scanner;
class Veckratniki {
	public static void main (String[] args) {
	Scanner sc = new Scanner(System.in);
	
		long a=sc.nextLong();
		long b=sc.nextLong();
		long rezultati=0;
		
		for (long v = a; v <= b; v++) {
			if (v%2==0 || v%3==0 || v%5==0){
			rezultati++;
			}
		}
		System.out.println(rezultati);
	}	
}

mgermo ::

In napaka je ???

galu ::

Hint: verjetno ti JVM gnjavi zaradi odsotnosti (vsaj enega) public classa.
Tako to gre.

konan5 ::

To je problem, samo napiše, da napaka je, je pa ne definira. Mogoče je kaj v zvezi z "učinkovitostjo" kode. Ko jo ročno testiram iz cmd-ja rabi program veliko preveč časa za vhode dolžine 10^18. Ena od omejitev pa je 1 sekunda in 32 megabajtov za vsak testni primer.

roko granata ::

Najlažje bo če skrajšaš kodo na potrbne tri vrstice.

Koraki si sledijo:
1. za vsa števila med prvim in drugim vohodom
2. preveri, če je število deljivo z 2 ALI 3 ALI 5,
3. če je pogoj resničen, povečaj izhod za ena
4. izpiši izhod

Zadnjih dveh izhodov s tem pristopom ne boš rešil v danem času. Takšne iteracije so pri števkah tipa long precej počasne.

Predvsem pa si omisli nek IDE, ker v terminalu boš samo oddajal naloge.


Vredno ogleda ...

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

(težava) long long v C

Oddelek: Programiranje
5937 (693) technolog
»

Java metode;

Oddelek: Programiranje
354941 (4133) ragezor
»

[Java] Kako filtrirati, katera števila lahko vpišeš?

Oddelek: Programiranje
182079 (1781) fiction
»

[C++] novi standardi in compilerji

Oddelek: Programiranje
211608 (1201) Ezekiel
»

[C/C++] unsigned long lala = -1;

Oddelek: Programiranje
51167 (1126) Vesoljc

Več podobnih tem