Java'da bir sayının asal olup olmamasını kontrol etmek için sonuç1 ve sonuç2 şeklinde 2 tane değer atadım. Biri float biri integer, her ikisini de sırayla bölen sayısına böldürtüyorum. Bölen 1 den başlayıp kullanıcının girdiği sayı değerine kadar 1 artarak sayıyı 2 kere bölüyor. Sonuç1 ve sonuç2 değerleri aynı olduğu anda ölçer diye atadığım değer 1 artıyor. Bölme işlemleri bittikten sonra eğer ölçer sayısı 3 den küçükse sayı asal oluyor.( 1 sayısı istisna ) Böyle bir sistem oluşturduğumda doğru cevabı bulamıyorum. Kurduğum mantık doğru mudur? Kafamda oluşturduğum mantık; integer veri tipi virgüllü sayıların virgülden sonrasını atıp virgülden öncesine baktığı için asal sayılarda sonuç1 ve sonuç2 değerleri sadece 2 kere eşit olur. O da 1 le ve kendisiyle bölündüğü zaman. Ama dediğim gibi doğru çalışmıyor.
edit.
---------------
import java.util.Scanner;
public class denemeAsalSayı {
public static void main (String[] args)
{
Scanner scan = new Scanner(System.in);
int sayı ;
float sonuç ;
int sonuç2 ;
int bölen;
int ölçer = 0 ;
int durum = 1 ;
bölen =1;
System.out.println("Sayıyı giriniz.");
sayı = scan.nextInt();
for ( durum = 1 ; bölen < sayı + 1 ; bölen ++ )
{
sonuç = sayı / bölen ;
sonuç2 = sayı/ bölen ;
if(sonuç == sonuç2)
{
ölçer ++;
}
}
if(ölçer <=2 || sayı == 1 )
{
System.out.println("Sayı asal!");
}
else
System.out.println("Sayı asal değil.");
}
}
---------------
#akış @ozgurg
@tjwh bana burada hataya sebep olan şey iki kez bölme işlemi gibi geldi. Sayıyı ikinci kez bölerken ilk bölme işlemini yapmadığınız halini bölmelisiniz.
ayrıca java bilmesem de sanırım o dilde de mantık şöyleydi. Sonucu atadığınız değişken tipi float olsa da böldüğünüz sayı tam sayı sonucun float olması için casting yapmalı ya da mesela 2 ye bölüyorsanız 2.0'a bölmelisiniz yani bölen sayı float olmalı ki sonuç float olsun.
Hata bunlardan kaynaklanmıştır diye düşünüyorum fakat çok daha basit bir mantıkla da yapılabilir
Yazı yerine kodu göster.
2. Bölme kısmını ablamadım. 17 yi 17 ye bildün cevap 1. 1 i tekrar 17 ye bölersen eşit çıkmaz. Yukarıda da denmiş kodu gönderirsen daha iyi yardımcı oluruz
İlk gözüme çarpanı söyleyeyim hepsine şuan bakamayabilirim. Float değil double kullan javada
@redmaner Double kullanınca da olmuyor ama öneriniz için teşekkürler.
Pardon az önce yanlış yazmışım kb. Editing...
@tjwh bence for statement ın içi hatalı gibi. ; ile ayrılan yerlerde ortak karakter olması gerek gibi. İlk kısma durum değilde bölen=1 yapmalısın
@redmaner Öncesinde onu da denedim o da olmadı. O yüzden zaten onla bağımsız bir şey yapmayı denedim.
Neden bölmeyle yaptırıyorsunuz?Mod almayı deneyin.
@zrrckkk Daha öğrenme aşamasındayım. Şuana kadar öğrendiklerimle yapmak istedim.
@zrrckkk dediği gibi m od alarak yapabilirsin. Ama öncelikle sayının 1'den büyük mü olduğunu kontrol et.
@ozgurg Dediğim gibi şuana kadar öğrendiğim şeylerle bir şey yapmaya çalışıyorum. Bu yüzden mod alarak yapmak benim için şu durumda bir çözüm değil maalesef.
For un içini dediğim gibi ilk if statement ın içini de sonuç/sonuç2 ==1.0 şeklinde yapıp dener misin?
@redmaner Denedim yine olmadı. 🙂
@tjwh 1.0 değilde 1 i dene 🙂