Belirli bir sayının çift mi yoksa tek mi olduğunu nasıl anlarım? Bunu uzun zamandır çözmek istiyordum ve hiçbir yere varamadım.
Belirli bir sayının çift mi yoksa tek mi olduğunu nasıl anlarım? Bunu uzun zamandır çözmek istiyordum ve hiçbir yere varamadım.
Yanıtlar:
Modül işlecini kullanabilirsiniz, ancak bu yavaş olabilir. Tam sayı ise şunları yapabilirsiniz:
if ( (x & 1) == 0 ) { even... } else { odd... }
Bunun nedeni, düşük bitin her zaman tek sayıya ayarlanacak olmasıdır.
n % 2 == 0semantik aracı Divide by 2 and check if the remainder is 0daha net daha uzun olduğu, n & 1 == 0anlamına gelir Zero all the bits but leave the least significant bit unchanged and check if the result is 0. İlkinin iyileştirilmiş netliği, (muhtemelen mevcut olmayan) ek yüke değer. Erken optimizasyonla kastettiğim buydu. Şey yavaş ve değişen bu bölümünde bunu profil ise n % 2hiç n & 1kuşkusuz haklı, ancak önceden bunu yapıyor değil. Genel olarak, profil oluşturmadan önce bit operatörleriyle çalışmak kötü bir fikirdir.
n % 2 == 0daha temiz olan öznel görüşünüzdür n & 1 == 0.
2'ye böldüğünüzde kalan 0 ise, çifttir. %kalan almak için operatördür.
(A % B)kendisi bir ifade olarak kullanılabilir ve işte o zaman işler eğlenceli hale gelir.
Her çift sayı, ondalık olup olmadığına bakılmaksızın ikiye bölünebilir (ancak varsa ondalık da çift olmalıdır). Böylece %soldaki sayıyı sağdaki sayıya bölen ve kalanı döndüren (modulo) operatörünü kullanabilirsiniz ...
boolean isEven(double num) { return ((num % 2) == 0); }
Ben tavsiye ederim
Java Bulmacaları: Tuzaklar, Tuzaklar ve Köşe Vakaları Kitabı Joshua Bloch ve Neal Gafter
Sayının tek olup olmadığının nasıl kontrol edileceğine dair kısa bir açıklama var. İlk deneme, @AseemYadav'ın denediğine benzer bir şey:
public static boolean isOdd(int i) {
return i % 2 == 1;
}
ancak kitapta belirtildiği gibi:
kalan işlem sıfırdan farklı bir sonuç döndürdüğünde, sol işlenen ile aynı işarete sahiptir
yani genellikle negatif tek sayıya sahip 1olduğumuzda bunun yerine -1sonucunu elde ederiz i%2. Böylece @Camilo çözümünü kullanabiliriz veya sadece şunları yapabiliriz:
public static boolean isOdd(int i) {
return i % 2 != 0;
}
ancak genellikle en hızlı çözüm, yukarıda @lucasmo gibi AND operatörünü kullanmaktır:
public static boolean isOdd(int i) {
return (i & 1) != 0;
}
@Düzenle Ayrıca Math.floorMod(int x, int y);, temettüyü negatif olan ancak -1bölen negatifse geri dönebileceğini de belirtmeye değer
Sayının çift mi yoksa tek mi olduğunu kontrol etmek için en az anlamlı bit (en sağdaki) kullanılabilir. Tüm Tek sayılar için, ikili gösterimde en sağdaki bit her zaman 1'dir.
public static boolean checkOdd(long number){
return ((number & 0x1) == 1);
}
Aşağıdaki program büyük sayıları işleyebilir (20'den büyük basamak sayısı)
package com.isEven.java;
import java.util.Scanner;
public class isEvenValuate{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String digit = in.next();
int y = Character.getNumericValue(digit.charAt(digit.length()-1));
boolean isEven = (y&1)==0;
if(isEven)
System.out.println("Even");
else
System.out.println("Odd");
}
}
İşte çıktı:
122873215981652362153862153872138721637272
Even
Modül işlecini kullanabilirsiniz, ancak bu yavaş olabilir. Daha verimli bir yol, en düşük biti kontrol etmektir çünkü bu, bir sayının çift mi yoksa tek mi olduğunu belirler. Kod şuna benzer:
public static void main(String[] args) {
System.out.println("Enter a number to check if it is even or odd");
System.out.println("Your number is " + (((new Scanner(System.in).nextInt() & 1) == 0) ? "even" : "odd"));
}
Bunu beğenebilirsin:
boolean is_odd(int n) {
return n % 2 == 1 || n % 2 == -1;
}
Bunun nedeni, Java'nın modulo işleminde temettü, sol tarafın işaretine sahip olmasıdır: n. Yani negatifler ve pozitif temettüler için modulo bunların işaretini taşır.
Tabii ki, bitsel işlem daha hızlı ve optimize edilmiştir, basitçe kod satırını iki veya üç kısa sözcükle belgeleyin, bu da bunu okunabilirlik için yapar.
Bunu if / else koşulunu kullanmadan yapmanın başka bir kolay yolu (hem pozitif hem de negatif sayılar için çalışır):
int n = 8;
List<String> messages = Arrays.asList("even", "odd");
System.out.println(messages.get(Math.abs(n%2)));
Tek no. İçin ifade kalan olarak '1'i döndürür ve
messages.get (1) = 'tek' ve dolayısıyla 'tek' yazdırılıyor
aksi takdirde, ifade "0" sonucuyla geldiğinde "çift" yazdırılır
int n = -3;. @Camilo'nun aşağıda belirtildiği gibi - kalan işlem sıfırdan farklı bir sonuç döndürdüğünde, sol System.out.println(messages.get(-1));java.lang.ArrayIndexOutOfBoundsException
Verilen sayının modülü sıfıra eşitse, sayı çift sayıdır. Bunu yapan yöntem aşağıdadır:
public void evenOrOddNumber(int number) {
if (number % 2 == 0) {
System.out.println("Number is Even");
} else {
System.out.println("Number is odd");
}
}
package isevenodd;
import java.util.Scanner;
public class IsEvenOdd {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter number: ");
int y = scan.nextInt();
boolean isEven = (y % 2 == 0) ? true : false;
String x = (isEven) ? "even" : "odd";
System.out.println("Your number is " + x);
}
}
İşte belirli bir sayının çift mi yoksa tek mi olduğunu belirlemek için bir örnek:
import java.util.Scanner;
public class EvenOdd
{
public static void main(String[] args)
{
int a;
System.out.println("Please enter a number to check even or odd:");
Scanner sc = new Scanner(System.in);
a = sc.nextInt();
if(a % 2 == 0)
{
System.out.println("Entered number is an even number");
}
else
{
System.out.println("Entered number is an odd number");
}
}
}
Aynı şeyi belirlemenin birçok yolu var. Verilen sayının çift veya tek olduğunu bulmak için daha fazla örnek için bu kaynağa bakın .
İşte tam örnek: -
import java.text.ParseException;
public class TestOddEvenExample {
public static void main(String args[]) throws ParseException {
int x = 24;
oddEvenChecker(x);
int xx = 3;
oddEvenChecker(xx);
}
static void oddEvenChecker(int x) {
if (x % 2 == 0)
System.out.println("You entered an even number." + x);
else
System.out.println("You entered an odd number." + x);
}
}