Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Jekbe

Java, liczby pierwsze - problem

Rekomendowane odpowiedzi

Hej. Napisałem ten oto prosty programik:

 

package nauka;

 

import java.util.Scanner;

 

public class p1

{

public static void main(String[]args)

{

Scanner i = new Scanner (System.in);

 

int n = i.nextInt();

int l;

 

for (l=1; l<=n; l++)

{

if (t(l))

{

System.out.println(l + " TAK");

}

else

{

System.out.println(l + " NIE");

}

}

i.close();

 

}

 

public static boolean t(int l)

{

int a;

for (a=2; a<=Math.sqrt(l); a++)

{

if (l==1)

{

return false;

}

else if (l%a==0)

{

return false;

}

}

return true;

}

}

 

i jest z nim problem. Mianowicie 1 według programu jest liczbą pierwszą. Kompletnie nie wiem co robię źle. Niby jak patrzę to nawet wykonując po kolei to co ma robić kod wychodzi mi dobrze, ale jak uruchamiam to wynik jest błędny. Da mi ktoś przynajmniej jakąś podpowiedź gdzie mam szykać błędu, na razie nie proszę o gotowca, wolę sam znaleźć błąd, więcej się nauczę.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Czytamy przyklejone tematy? Popraw to czego brakuje.

 

Na dobry start: miej litość dla siebie i innych, i nazywaj zmienne i funkcje jak człowiek...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

package nauka;

import java.util.Scanner;

public class p1 
{
public static void main(String[]args) 
{
	Scanner i = new Scanner (System.in);

	int n = i.nextInt();
	int l;

	for (l=1; l<=n; l++)
	{
		if (t(l))
		{
			System.out.println(l + " TAK");
		}
		else
		{
			System.out.println(l + " NIE");
		}
	}
	i.close();

}

public static boolean t(int l)
{
	int a;
	for (a=2; a<=Math.sqrt(l); a++)
	{
		if (l==1)
		{
			return false;
		}
		else if (l%a==0)
		{
			return false;
		}
	}
	return true;
}
}

 

teraz lepiej?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zdecydowanie :) Posty można co prawda edytować, ale lepszy rydz niż nic.

Z tymi nazwami to serio - funkcje i zmienne po to mają nazwy, by one coś mówiły. Jednoliterowce sugerują (poza pewnymi wyjątkami), że autor kodu albo nie wie, do czego służy zmienna (zły znak), albo celowo trolluje innych (i siebie często też).

 

Zastanów się - czy wywołując funkcję t dla jedynki, wykonanie chodź raz przechodzi przez for'a? Ile wynosi pierwiastek dla 1?

 

Przy okazji:

dlaczego piszesz

int l;
for (l=1; l<=n; l++)

zamiast

for (int l=1; l<=n; l++)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

zamiast

 public static boolean t(int l)
       {
               int a;
               for (a=2; a<=Math.sqrt(l); a++)
               {
                       if (l==1)
                       {
                               return false;
                       }
                       else if (l%a==0)
                       {
                               return false;
                       }
               }
               return true;
       }

 

 public static boolean t(int l)
       {
               int a;
               for (a=2; a<=Math.sqrt(l); a++)
               {
                       if (l==1 || l%a==0)
                       {
                               return false;
                       }                        
               }
               return true;
       }

 

Juz abstrahując od nazwy metody i zmiennych chyba lepiej się to czyta? :E

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeszcze lepiej, to wywalić sprawdzenie czy to 1 przed pętlę. Po co ciągle mielić taki warunek, skoro w obiegu pętli wynik zawsze będzie ten sam?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...