(A == 1 && a == 2 && a == 3) জাভাতে সত্যের মূল্যায়ন করতে পারে?


176

আমরা জানি এটি জাভাস্ক্রিপ্টে করতে পারে

তবে জাভাতে নীচের শর্তে "সাফল্য" বার্তাটি মুদ্রণ করা সম্ভব?

if (a==1 && a==2 && a==3) {
    System.out.println("Success");
}

কেউ পরামর্শ দিয়েছেন:

int _a = 1;
int a  = 2;
int a_ = 3;
if (_a == 1 && a == 2 && a_ == 3) {
    System.out.println("Success");
}

তবে এটি করে আমরা আসল ভেরিয়েবল পরিবর্তন করছি। অন্য কোন উপায আছে কি?


5
&&লজিকাল andঅপারেটর, যার অর্থ aএকই সময়ে 1, 2 এবং 3 এর মান হওয়া উচিত যা যৌক্তিকভাবে অসম্ভব। উত্তরটি না, সম্ভব নয় not আপনি কি এমন একটি ifবিবৃতি লিখতে চান যা a1, 2 বা 3 এর কোনও মান আছে কিনা তা যাচাই করে ?
বরিস পাভলভী

16
প্রত্যেকের কাছে নোট: এই প্রশ্নের জাভাস্ক্রিপ্ট একই প্রশ্ন কাছ থেকে আসতে পারে stackoverflow.com/questions/48270127/... , যে ক্ষেত্রে উত্তরyes
টি

28
@ আর্থার অ্যাটআউট কোনও সদৃশ নয়, প্রশ্নটি জাভাস্ক্রিপ্টের জন্য, জাভা নয়।
টি

13
ভেরিয়েবল নামের সাদা বাক্সের ব্যবহার করা জাভাতেও কাজ করে। তবে অবশ্যই এটি ব্যবহারের মতোই _, তবে আপনি এটি দেখতে না পারলে।
tobias_k

8
@ সিলেনভির্চুয়েস সত্য, তবে if(a==1 && a==2 && a==3)একই সময়ে মূল্যায়ন করার প্রয়োজন নেই। এবং এটি ইউনিকোড কৌশল অবলম্বন না করেই এই কাজটি করতে ব্যবহৃত হতে পারে।
এরউইন বোলভিড 15

উত্তর:


325

হ্যাঁ, আপনি যদি পরিবর্তনকে aঅস্থির হিসাবে ঘোষণা করেন তবে একাধিক থ্রেড সহ এটি অর্জন করা বেশ সহজ ।

একটি থ্রেড অবিচ্ছিন্নভাবে 1 থেকে 3 এ পরিবর্তনশীল পরিবর্তন করে এবং অন্য থ্রেড ক্রমাগত এটি পরীক্ষা করে a == 1 && a == 2 && a == 3। এটি প্রায়শই কনসোলে "সাফল্য" এর ধারাবাহিক স্ট্রিম ছাপার জন্য যথেষ্ট হয়।

(দ্রষ্টব্য আপনি যদি কোনও else {System.out.println("Failure");}ধারা যোগ করেন তবে আপনি দেখতে পাবেন যে পরীক্ষার সাফল্যের চেয়ে অনেক বেশি সময় ব্যর্থ হয়))

অনুশীলনে, এটি aঅস্থির হিসাবে ঘোষণা না করেও কাজ করে , তবে আমার ম্যাকবুকটিতে কেবল 21 বার। ছাড়া volatile, সংকলক বা হটস্পটকে বিবৃতিটি ক্যাশে aবা প্রতিস্থাপনের অনুমতি দেওয়া হয় । সম্ভবত, হটস্পট কিছুক্ষণ পরে কিক্স করে এবং এটি সমাবেশ নির্দেশাবলীতে সংকলন করে যা এর মান ক্যাশে করে । সহ , এটি চিরতরে "সাফল্য" মুদ্রণ করে রাখে।ifif (false)a volatile

public class VolatileRace {
    private volatile int a;

    public void start() {
        new Thread(this::test).start();
        new Thread(this::change).start();
    }

    public void test() {
        while (true) {
            if (a == 1 && a == 2 && a == 3) {
                System.out.println("Success");
            }
        }
    }

    public void change() {
        while (true) {
            for (int i = 1; i < 4; i++) {
                a = i;
            }
        }
    }

    public static void main(String[] args) {
        new VolatileRace().start();
    }
}

83
এটি একটি উজ্জ্বল উদাহরণ! আমি মনে করি পরের বার আমি কোনও জুনিয়র দেবের সাথে সম্ভাব্য বিপজ্জনক সম্মিলিত বিষয়গুলি নিয়ে আলোচনা করছি আমি এটি চুরি করব :)
অ্যালেক্স প্রস

6
এটি খুব সম্ভবত ছাড়া নয় volatile, তবে নীতিগতভাবে, এটি volatileকীওয়ার্ড ছাড়াও ঘটতে পারে এবং এটি নির্বিচারে বহুবার ঘটতে পারে, অন্যদিকে, এটি কখনও ঘটবে এমন কোনও গ্যারান্টি নেই, এমনকি তাও volatile। তবে অবশ্যই বাস্তবে এটি ঘটছে, শান্ত চিত্তাকর্ষক…
হোলার

5
@ অ্যালেক্সপ্রস আমি কেবলমাত্র আমার সংস্থার জুনিয়রকেই নয়, সমস্ত দেবকেই করেছি (আমি জানতাম এটি সম্ভব হতে পারে), উত্তরে ব্যর্থতার ৮%% সাফল্য
ইউজিন

3
@ হোলজার ট্রু, এর কোনও গ্যারান্টি নেই। সাধারণ একাধিক-পূর্ণ-কোর বা মাল্টি-সিপিইউ আর্কিটেকচারে, যেখানে উভয় থ্রেড পৃথক কোরকে অর্পণ করা হয়, এটি সম্ভবত হওয়ার সম্ভাবনা রয়েছে volatilevolatileথ্রেডগুলি ধীরে ধীরে কার্যকর করতে এবং এটিকে আরও কম সময়ের জন্য ইন-সিঙ্কে চালিত করার সম্ভাবনা আরও বেশি করে তৈরি করতে তৈরি করা মেমরি বাধা bar এটি আমার প্রত্যাশার চেয়ে অনেক বেশি ঘটে। এটি খুব সময় সংবেদনশীল, তবে আমি মোটামুটি দেখতে পাই যে (a == 1 && a == 2 && a == 3)রিটার্নের মূল্যায়নের 0.2% থেকে 0.8% এর মধ্যে true
এরউইন বোলভিড

4
এটি হ'ল একমাত্র উত্তর যা প্রকৃতপক্ষে কেবলমাত্র ছোট ছোট বিভিন্ন পরিবর্তনের পরিবর্তে উদ্দেশ্যিত কোডটিকে সত্যে ফিরে আসে। +1
আলেজান্দ্রো

85

A থেকে ধারণা (এবং কোড) ব্যবহার উজ্জ্বল কোড গলফ উত্তর , Integerমান সঙ্গে তছনছ করা যেতে পারে।

এই ক্ষেত্রে এটি intকাস্ট Integerকরা সমান হতে পারে যখন তারা সাধারণত হয় না:

import java.lang.reflect.Field;

public class Test
{
    public static void main(String[] args) throws Exception
    {
        Class cache = Integer.class.getDeclaredClasses()[0];
        Field c = cache.getDeclaredField("cache");
        c.setAccessible(true);
        Integer[] array = (Integer[]) c.get(cache);
        // array[129] is 1
        array[130] = array[129]; // Set 2 to be 1
        array[131] = array[129]; // Set 3 to be 1

        Integer a = 1;
        if(a == (Integer)1 && a == (Integer)2 && a == (Integer)3)
            System.out.println("Success");
    }
}

দুর্ভাগ্যক্রমে এটি এরউইন বোলভিডের বহুবিধ উত্তর (যেমন Integerএটির castালাই প্রয়োজন ) এর মতো তেমন মার্জিত নয় , তবে এখনও কিছু মজাদার শেনানিগান স্থান নিয়েছে।


খুব আকর্ষণীয়. আমি গালি দিয়ে টোয়াই করছিলাম Integer। Ingালাই সম্পর্কে এটি লজ্জাজনক তবে এটি এখনও দুর্দান্ত।
মাইকেল

@ মিশেল আমি কীভাবে কাস্টিং থেকে মুক্তি পেতে পারি তা বেশ বুঝতে পারি না। a1/2/3 এ সেট করা সন্তুষ্ট হবে a == 1, তবে অন্যভাবে যায় না
phflack

4
আমি এই প্রশ্নের উত্তর কয়েক দিন আগে জেএস / রুবি / পাইথনে এবং Java। অন্তত কুশ্রী সংস্করণ আমি খুঁজে পাইনি ব্যবহার করতে ছিল a.equals(1) && a.equals(2) && a.equals(3), যা বাহিনী 1, 2এবং 3যেমন autoboxed করা Integerগুলি।
এরিক ডুমিনিল

@ এরিকডুমিনিল যা কিছুটা মজা নিতে পারে কারণ আপনি যদি aক্লাসে পরিণত হন তবে কি হবে boolean equals(int i){return true;}?
phflack

1
যেমনটি আমি বলেছি, এটি সর্বনিম্ন কুরুচিপূর্ণ তবে এটি এখনও অনুকূল নয়। সঙ্গে Integer a = 1;সামনে লাইনে, এটা এখনও পরিষ্কার aসত্যিই একটি পূর্ণসংখ্যা।
এরিক ডুমিনিল

52

ইন এই প্রশ্নের @aioobe প্রস্তাব দেওয়া (এবং বিরুদ্ধে পরামর্শ) জাভা ক্লাস জন্য C প্রাক প্রসেসর ব্যবহার।

যদিও এটি অত্যন্ত প্রতারণাপূর্ণ, এটি আমার সমাধান:

#define a evil++

public class Main {
    public static void main(String[] args) {
        int evil = 1;
        if (a==1 && a==2 && a==3)
            System.out.println("Success");
    }
}

নিম্নলিখিত কমান্ড ব্যবহার করে যদি এটি কার্যকর করা হয় তবে এটি ঠিক একটি আউটপুট তৈরি করবে Success:

cpp -P src/Main.java Main.java && javac Main.java && java Main

6
এই ধরণের কোডটি আবিষ্কারের মাধ্যমে কোডটি চালানোর মত অনুভূত হয় এবং এটি সংকলনের আগে প্রতিস্থাপন করে তবে আমি অবশ্যই তাদের কর্মপ্রবাহের অংশ হিসাবে কেউ এরকম কিছু করতে
দেখেছি

1
@ ফাফ্ল্যাক আমার পছন্দ হয়েছে, যুক্তিযুক্তভাবে এই প্রশ্নটি কোড পড়ার সময় অনুমান করার ঝুঁকিগুলি দেখানো সম্পর্কে। এটি aএকটি পরিবর্তনশীল হিসাবে ধরে নেওয়া সহজ , তবে এটি প্রাক-প্রসেসর সহ ভাষাগুলিতে কোনও যেকোন স্বেচ্ছাসেবী কোড হতে পারে।
কেভিন

2
এটি জাভা নয় এটি "সি প্রিপ্রসেসর পেরিয়ে জাভা পরে" ভাষা। এই উত্তর দ্বারা ব্যবহৃত অনুরূপ লুফোল । : (নোট underhanded হয় -বহির্ভূত কোড গলফ জন্য এখন)
user202729

40

যেহেতু আমরা ইতিমধ্যে জানি যে এই কোডটি এরউইন বলউইড্ট এবং পিএইচএফ্ল্যাকের দুর্দান্ত উত্তরের জন্য সত্য ধন্যবাদের সাথে মূল্যায়ন করা সম্ভব is , আমি এটি দেখাতে চেয়েছিলাম যে কোনও অবস্থার সাথে আচরণ করার সময় আপনাকে একটি উচ্চ পর্যায়ের মনোযোগ রাখতে হবে যা উপস্থাপিত মত দেখাচ্ছে প্রশ্নে, কখনও কখনও আপনি যা দেখেন তা হতে পারে যা ঠিক মনে হয় তা না।

এই কোডটি কনসোলটিতে প্রিন্ট Success!করে তা দেখানোর আমার এই প্রয়াস । আমি জানি আমি কিছুটা প্রতারণা করেছি , তবে আমি এখনও মনে করি এটি এখানে উপস্থাপনের জন্য এটি একটি ভাল জায়গা।

এই জাতীয় কোড লেখার উদ্দেশ্যগুলি কী তা নয় - নিম্নলিখিত পরিস্থিতিটি কীভাবে মোকাবেলা করতে হবে এবং আপনি যা দেখেন তা মনে করে আপনার ভুল না হলে কীভাবে তা পরীক্ষা করা ভাল better

আমি সিরিলিক 'এ' ব্যবহার করেছি যা লাতিন 'এ' থেকে আলাদা একটি চরিত্র। আপনি যদি এখানে বিবৃতিতে ব্যবহৃত অক্ষরগুলি পরিদর্শন করতে পারেন

এটি কাজ করে কারণ ভেরিয়েবলের নামগুলি বিভিন্ন বর্ণমালা থেকে নেওয়া হয়। তারা পৃথক সনাক্তকারী, প্রতিটি পৃথক পৃথক মান সহ দুটি স্বতন্ত্র ভেরিয়েবল তৈরি করে।

নোট করুন যে আপনি যদি এই কোডটি সঠিকভাবে কাজ করতে চান তবে অক্ষর এনকোডিং উভয় অক্ষরকে সমর্থন করে একটিতে পরিবর্তন করা দরকার, যেমন সমস্ত ইউনিকোড এনকোডিং (ইউটিএফ -8, ইউটিএফ -16 (বিই বা এলইও তে), ইউটিএফ -32, এমনকি ইউটিএফ -7 ), বা উইন্ডোজ-1251, আইএসও 8859-5, KOI8-R (আপনাকে ধন্যবাদ - থমাস ওয়েলার এবং পাওলো ইবারম্যান - এটি দেখানোর জন্য):

public class A {
    public static void main(String[] args) {
        int а = 0;
        int a = 1;
        if == 0 && a == 1) {
            System.out.println("Success!");
        }
    }
}

(আমি আশা করি ভবিষ্যতে কখনই আপনাকে এই ধরণের সমস্যার মোকাবেলা করতে হবে না))


@ মিশেল আপনি কী বোঝাতে চাইছেন যে এটি ভালভাবে প্রদর্শিত হচ্ছে না? আমি এটি মোবাইল ফোনে লিখেছি এবং ডেস্কটপ ভিউতে স্যুইচ করার পরেও এটি আমার কাছে ঠিক দেখাচ্ছে। যদি এটি আমার উত্তরকে আরও ভাল করে তুলতে পারে তবে দয়া করে এটিকে সম্পাদনা করতে নির্দ্বিধায় দ্বিধা করুন, কারণ এখনই আমি এটি কিছুটা শক্ত মনে করি it
প্রেমেসিয়াউ মোসকাল

@ মিশেল আপনাকে অনেক ধন্যবাদ আমি ভেবেছিলাম যে আমার উত্তরের শেষে আমি যা স্বীকার করেছি তা যথেষ্ট! :)
প্রেমেসিয়াউ মোসকাল

@ মোহসেনমাদি হ্যাঁ, আমি এখানে মোবাইল ফোনে এটি পরীক্ষা করতে পারছি না, তবে আমি নিশ্চিত যে সম্পাদনের আগে শেষ বাক্যটি আমার উদাহরণে বিভিন্ন ভাষা ব্যবহারের বিষয়ে ছিল: পি
প্রজেমেসো মোসকাল

= == 0 এর সাথে একটি == 1 সমান হওয়া উচিত কেন?
টমাস ওয়েলার

1
আরও নিটপিকিং: আপনার প্রয়োজনীয়ভাবে ইউটিএফ -8 প্রয়োজন নেই (যদিও এটি যেভাবেই প্রস্তাবিত হয়), যে কোনও অক্ষর এনকোডিং যা উভয়ই রয়েছে аএবং এটি কার্যকর রয়েছে a, যতক্ষণ আপনি আপনার সম্পাদককে এটি কী এনকোডিং রয়েছে তা জানান (এবং সম্ভবত সংকলকটিও)। সমস্ত ইউনিকোড এনকোডিংগুলি (ইউটিএফ -8, ইউটিএফ -16 (বিই বা এলই তে), ইউটিএফ -32, এমনকি ইউটিএফ -7), পাশাপাশি উইন্ডোজ -1211, আইএসও 8859-5, কেওআই 8-আর।
পাওলো ইবারম্যান

27

পাওয়ারমকের শক্তি ব্যবহার করে এটির কাছে যাওয়ার আরও একটি উপায় রয়েছে (আমি পূর্বে পোস্ট করা অস্থির ডেটা-রেসিং পদ্ধতির অতিরিক্ত) পাওয়ারমক পদ্ধতিগুলি অন্যান্য প্রয়োগের সাথে প্রতিস্থাপনের অনুমতি দেয়। যখন এটি অটো-আনবক্সিংয়ের সাথে একত্রিত হয় (a == 1 && a == 2 && a == 3), কোনও পরিবর্তন ছাড়াই আসল অভিব্যক্তিটিকে সত্য করা যায়।

@ পিএফএফ্ল্যাকের উত্তর জাভাতে অটো-বক্সিং প্রক্রিয়া সংশোধন করার উপর নির্ভর করে যা Integer.valueOf(...)কলটি ব্যবহার করে । নীচের পদ্ধতির Integer.intValue()কল পরিবর্তন করে অটো-আনবক্সিং সংশোধন করার উপর নির্ভর করে ।

নীচের পদ্ধতির সুবিধাটি হ'ল প্রশ্নে ওপি প্রদত্ত আসল বিবৃতিটি অপরিবর্তিতভাবে ব্যবহার করা হয়েছে, যা আমি মনে করি এটি সবচেয়ে মার্জিত।

import static org.powermock.api.support.membermodification.MemberMatcher.method;
import static org.powermock.api.support.membermodification.MemberModifier.replace;

import java.util.concurrent.atomic.AtomicInteger;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@PrepareForTest(Integer.class)
@RunWith(PowerMockRunner.class)
public class Ais123 {
    @Before
    public void before() {
        // "value" is just a place to store an incrementing integer
        AtomicInteger value = new AtomicInteger(1);
        replace(method(Integer.class, "intValue"))
            .with((proxy, method, args) -> value.getAndIncrement());
    }

    @Test
    public void test() {
        Integer a = 1;

        if (a == 1 && a == 2 && a == 3) {
            System.out.println("Success");
        } else {
            Assert.fail("(a == 1 && a == 2 && a == 3) != true, a = " + a.intValue());
        }
    }

}

পাওয়ারমক কি অভ্যন্তরীণ / বাহ্যিক শ্রেণীর ক্ষেত্রগুলি access$nnnপড়তে ব্যবহৃত পদ্ধতিগুলির মতো সিন্থেটিক পদ্ধতিগুলি প্রতিস্থাপন করতে পারে private? এটি অন্য কিছু আকর্ষণীয় বৈকল্পিক (যা এমনকি একটি intচলক সঙ্গে কাজ করে ) অনুমতি দেয় ...
হোলার

@ হোলজার আকর্ষণীয় ধারণা, আমি কী বলতে চাইছি তা আমি দেখতে পাচ্ছি। এটি এখনও কাজ করছে না - এটি কাজ করা থেকে কী থামছে তা পরিষ্কার করবেন না।
এরউইন বোলভিড 14

সত্যিই দুর্দান্ত, আমি যা করার চেষ্টা করছিলাম, কিন্তু আমি দেখতে পেয়েছি যে অচল শ্রেণীর থেকে স্থির পদ্ধতি পরিবর্তন করা বাইটকোডকে পরিচালনা না করেই বেশ কঠিন হবে। দেখে মনে হচ্ছে আমি ভুল ছিলাম, পাওয়ারমকের কথা কখনও শুনিনি, আমি ভাবছি যে এটি কী করে। পার্শ্ব নোট হিসাবে, phflack এর উত্তর অটোবক্সিংয়ের উপর নির্ভর করে না: তিনি ক্যাশেড ইন্টিজারের অ্যাড্রেসগুলি পরিবর্তন করে (সুতরাং == আসলে মানগুলির চেয়ে পূর্ণসংখ্যার অ্যাড্রেসগুলির তুলনা করে) are
Asoub

2
@ আসৌব ingালাই ( (Integer)2) বাক্সটি ইনট করুন। প্রতিবিম্বের আরও সন্ধান করলে মনে হচ্ছে প্রতিবিম্বটি ব্যবহার করে আনবক্সিং দিয়ে এটি করা সম্ভব নয়, তবে পরিবর্তে ইনস্ট্রুমেন্টেশন (বা এই উত্তর হিসাবে পাওয়ারমক দিয়ে)
phflack

@ বৃহত্তর এটি সম্ভবত সিনথেটিক পদ্ধতি বাধা দেয় না, যদিও এটি আমাকে একটি প্রতিস্থাপনের জন্য নিবন্ধন করতে দেয় এবং নিবন্ধের সময় access$0একটি পদ্ধতির অস্তিত্ব পরীক্ষা করা হয়। তবে প্রতিস্থাপনটি কখনই চাওয়া হয় না।
এরউইন বোলভিড

17

যেহেতু এটি এই জাভাস্ক্রিপ্ট প্রশ্নের ফলোআপ বলে মনে হচ্ছে , তাই এই কৌশলটি এবং জাভাতেও একই রকম কাজ করে:

public class Q48383521 {
    public static void main(String[] args) {
        int a = 1;
        int 2 = 3;
        int a = 3;
        if(aᅠ==1 && a==ᅠ2 && a==3) {
            System.out.println("success");
        }
    }
}

আইডিয়নে


তবে মনে রাখবেন যে আপনি ইউনিকোডের সাথে সবচেয়ে খারাপ কাজ করতে পারবেন না। বৈধ শনাক্তকারী অংশ যা সাদা-স্থান বা নিয়ন্ত্রণের অক্ষরগুলি ব্যবহার করে বা একই বর্ণ দেখতে আলাদা আলাদা অক্ষর ব্যবহার করে এমন শনাক্তকারী তৈরি করে যা আলাদা এবং স্পটযুক্ত হতে পারে, যেমন কোনও পাঠ্য অনুসন্ধান করার সময়।

কিন্তু এই প্রোগ্রাম

public class Q48383521 {
    public static void main(String[] args) {
        int ä = 1;
        int ä = 2;
        if(ä == 1 && ä == 2) {
            System.out.println("success");
        }
    }
}

কমপক্ষে ইউনিকোড দৃষ্টিকোণ থেকে এমন দুটি শনাক্তকারী ব্যবহার করুন যা একই। তারা শুধু একই চরিত্র এনকোড বিভিন্ন উপায় ব্যবহার äব্যবহার U+00E4এবং U+0061 U+0308

আইডিয়নে

সুতরাং আপনি যে সরঞ্জামটি ব্যবহার করছেন তার উপর নির্ভর করে, তারা কেবল একইরকম দেখতে পাবেন না, ইউনিকোড সক্ষম টেক্সট সরঞ্জামগুলি কোনও পার্থক্যের কথাও জানাতে পারে না, অনুসন্ধান করার সময় উভয়ই সন্ধান করে। এমনকি অন্য কারও কাছে সোর্স কোড অনুলিপি করার সময় বিভিন্ন উপস্থাপনা হারিয়ে যাওয়ার সমস্যা হতে পারে, সম্ভবত "অদ্ভুত আচরণ" এর জন্য সহায়তা নেওয়ার চেষ্টা করছেন, এটি সাহায্যকারীর জন্য অ-প্রজননযোগ্য making


3
হ্যাঁ, এই উত্তরটিতে ইউনিকোড অপব্যবহারের যথেষ্ট পরিমাণ নেই?
মাইকেল

2
int ᅠ2 = 3;এটা কি ইচ্ছাকৃত? কারণ, আমি চারপাশে খুব অদ্ভুত কোডটি দেখছি
রবি

1
@ মিশেল হুবহু নয়, কারণ এই উত্তরটি দুটি পৃথক অক্ষর (যা অনুসন্ধানের সময় আইডিইগুলি পৃথক বিবেচনা করবে a) ব্যবহার করার বিষয়ে রয়েছে, যেখানে এটি সাদা-স্পেস সম্পর্কে এবং ঠিক আছে, এটি সম্পর্কিত জাভাস্ক্রিপ্ট প্রশ্নের আরও পুরানো উত্তরগুলিকে ক্রেডিট দিচ্ছে। নোট করুন যে আমার মন্তব্যটি জাভা প্রশ্নের (বেশ কয়েকটি দিন দ্বারা) এর চেয়েও পুরানো ...
হোলগার

2
আমি পার্থক্য দেখছি না। উভয় উত্তরই একটি সমাধান সরবরাহ করে যেখানে if স্টেটমেন্টের তিনটি শনাক্তকারী অস্বাভাবিক ইউনিকোড অক্ষর ব্যবহারের কারণে দৃষ্টিভঙ্গি অনুসারে কিন্তু প্রযুক্তিগতভাবে পৃথক। এটি হোয়াইটস্পেস বা সিরিলিক অপ্রাসঙ্গিক কিনা।
মাইকেল

2
@ মিশেল আপনি এটি দেখতে পারেন, এটি আপনার হাতে to যেমনটি বলা হয়েছে, আমি বলতে চেয়েছিলাম যে জাভাস্ক্রিপ্টের জন্য পাঁচ দিন আগে দেওয়া উত্তরটি কেবল প্রশ্নের ইতিহাস বিবেচনা করে জাভাতে প্রযোজ্য। হ্যাঁ, এটি অন্য উত্তরে কিছুটা বাড়াবাড়ি যা লিঙ্কযুক্ত জাভাস্ক্রিপ্ট প্রশ্নের উল্লেখ করে না। যাইহোক, এরই মধ্যে আমি আমার উত্তরটি হালকাভাবে একইরকম অক্ষর সম্পর্কিত নয় এমন একটি ক্ষেত্রে যুক্ত করার জন্য আপডেট করেছি, তবে একই চরিত্রটিকে এনকোড করার বিভিন্ন উপায় এবং এটি একটি "অস্বাভাবিক ইউনিকোড চরিত্র "ও নয়; এটি এমন একটি চরিত্র যা আমি প্রতিদিন ব্যবহার করি…
হোলার

4

@ এরউইনের দুর্দান্ত উত্তরে অনুপ্রাণিত হয়ে আমি একই জাতীয় উদাহরণ লিখেছি, তবে জাভা স্ট্রিম এপিআই ব্যবহার করে ।

এবং একটি মজার বিষয় হ'ল আমার সমাধানটি কাজ করে তবে খুব বিরল ক্ষেত্রে (কারণ   just-in-timeসংকলক এই জাতীয় কোডটিকে অনুকূল করে)।

কৌশলটি হ'ল JITনিম্নলিখিত VMবিকল্পটি ব্যবহার করে কোনও অপ্টিমাইজেশন অক্ষম করা :

-Djava.compiler=NONE

এই পরিস্থিতিতে, সাফল্যের মামলার সংখ্যা উল্লেখযোগ্যভাবে বৃদ্ধি পায়। কোডটি এখানে:

class Race {
    private static int a;

    public static void main(String[] args) {
        IntStream.range(0, 100_000).parallel().forEach(i -> {
            a = 1;
            a = 2;
            a = 3;
            testValue();
        });
    }

    private static void testValue() {
        if (a == 1 && a == 2 && a == 3) {
            System.out.println("Success");
        }
    }
}

দ্রষ্টব্য সমান্তরাল স্ট্রিম ব্যবহার ForkJoinPoolফণা অধীন, এবং পরিবর্তনশীল একটি একাধিক থ্রেড মধ্যে কোনো সিঙ্ক্রোনাইজেশন ছাড়া ভাগ করা হয়, যে কেন ফলাফলের অ নির্ণায়ক হয়।


1

অনুরূপ লাইন বরাবর , একটি বৃহত সংখ্যার দ্বারা বিভাগ (বা গুণ) এর মাধ্যমে ভাসমান (বা ডাবল) তলদেশে (বা ওভারফ্লো) জোর করে:

int a = 1;
if (a / Float.POSITIVE_INFINITY == 1 / Float.POSITIVE_INFINITY
        && a / Float.POSITIVE_INFINITY == 2 / Float.POSITIVE_INFINITY
        && a / Float.POSITIVE_INFINITY == 3 / Float.POSITIVE_INFINITY) {
    System.out.println("Success");
}

2
@ পেট্রিকরোবার্টস - জাভা ডক্স অনুসারে এই নির্দিষ্ট আচরণটি ভাসমান পয়েন্ট আন্ডারফ্লো । আরো দেখুন এই , এই , এই & এই
অলোক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.