কোলন (:) অপারেটর কী করে?


92

স্পষ্টতই একটি কোলন জাভাতে একাধিক উপায়ে ব্যবহৃত হয়। কেউ কি এটা বোঝাতে মন চাইবে?

উদাহরণস্বরূপ:

String cardString = "";
for (PlayingCard c : this.list)  // <--
{
    cardString += c + "\n";
}

আপনি এই for-eachলুপটি কীভাবে আলাদাভাবে লিখবেন যাতে অন্তর্ভুক্ত না করা যায় :?


4
অন্যরা ইতিমধ্যে উল্লেখ করেছে যে এই জাতীয় কেস প্রতিটি লুপ। এটি কীভাবে কাজ করে তার আরও বিশদ ব্যাখ্যার জন্য java.sun.com/j2se/1.5.0/docs/guide/language/foreach.html
জোনিক

উত্তর:


196

জাভা কোডে বেশ কয়েকটি জায়গা কলোন ব্যবহৃত হয়:

1) জাম্প আউট লেবেল ( টিউটোরিয়াল ):

label: for (int i = 0; i < x; i++) {
    for (int j = 0; j < i; j++) {
        if (something(i, j)) break label; // jumps out of the i loop
    }
} 
// i.e. jumps to here

2) মাতাল অবস্থা ( টিউটোরিয়াল ):

int a = (b < 4)? 7: 8; // if b < 4, set a to 7, else set a to 8

3) প্রতিটি লুপের জন্য ( টিউটোরিয়াল ):

String[] ss = {"hi", "there"}
for (String s: ss) {
    print(s); // output "hi" , and "there" on the next iteration
}

4) জোর ( গাইড ):

int a = factorial(b);
assert a >= 0: "factorial may not be less than 0"; // throws an AssertionError with the message if the condition evaluates to false

5) কেস ইন সুইচ স্টেটমেন্ট ( টিউটোরিয়াল ):

switch (type) {
    case WHITESPACE:
    case RETURN:
        break;
    case NUMBER:
        print("got number: " + value);
        break;
    default:
        print("syntax error");
}

6) পদ্ধতি রেফারেন্স ( টিউটোরিয়াল )

class Person {
   public static int compareByAge(Person a, Person b) {
       return a.birthday.compareTo(b.birthday);
   }}
}

Arrays.sort(persons, Person::compareByAge);

4
সুন্দর - আমি মিস করেছি কিছু! এবং আমি জানতাম না যে আপনি এটির মতো নামকরণ করতে পারেন, খুব দরকারী।
ক্লডিউ

.NET (সি #) থেকে আসা, প্রশ্নে কাঠামোর নিকটতম সাদৃশ্য হ'ল প্রতিটি জন্য, যা আপনি ভাল পদ্ধতিতে ব্যাখ্যা করেছেন।
রজার

4
একটি ব্যর্থ assert"প্রোগ্রামটি ছেড়ে দেয় না"। এটি একটি ছুড়ে AssertionError। এটি কেবলমাত্র প্রোগ্রামটি প্রস্থান করতে পারে যদি এটি কেবলমাত্র অবশিষ্ট নন-ডেমন থ্রেডের স্ট্যাকের উপরে ফেলে দেওয়া হয় এবং ধরা পড়ে না।
স্টিফেন সি

আপনি যদি সমস্ত অন্তর্ভুক্ত করার লক্ষ্য
রাখেন

4
এছাড়াও, পদ্ধতি রেফারেন্সে একটি ডাবল কোলন ব্যবহৃত হয়।
ড্যানিয়েল এম।

34

কোনও "কোলন" অপারেটর নেই, তবে কোলন দুটি জায়গায় উপস্থিত হবে:

1: টার্নারি অপারেটরে যেমন:

int x = bigInt ? 10000 : 50;

এই ক্ষেত্রে, টেরিনারি অপারেটর এক্সপ্রেশনগুলির জন্য 'যদি' হিসাবে কাজ করে। যদি বিগইন্টটি সত্য হয় তবে এক্স এর সাথে 10000 নিয়োগ দেওয়া হবে। যদি তা না হয় তবে 50. এখানে কোলনের অর্থ "অন্য"।

2: প্রতিটি লুপের জন্য:

double[] vals = new double[100];
//fill x with values
for (double x : vals) {
    //do something with x
}

এটি 'vals' এর পরিবর্তে প্রতিটি মানকে x সেট করে। সুতরাং যদি ভালগুলি [10, 20.3, 30, ...] থাকে তবে x প্রথম পুনরাবৃত্তিতে 10 হবে, দ্বিতীয়টিতে 20.3 থাকবে etc.

দ্রষ্টব্য: আমি বলি এটি অপারেটর নয় কারণ এটি কেবল সিনট্যাক্স। এটি নিজে থেকে কোনও প্রদত্ত অভিব্যক্তিতে হাজির হতে পারে না এবং এটি কেবল সম্ভাবনা যে প্রত্যেকের জন্য এবং তৃতীয় অপারেটর উভয়ই কোলন ব্যবহার করে।


দ্বিতীয়ার্ধে সাহায্য করেছে এই বাস্তব উত্তর হওয়া উচিত,
ইআরপি

এটি প্রতিটি লুপের জন্য কী করছে তার আরও ভার্জোজ ব্যাখ্যার জন্য +1।
dfarrell07

18

কেবল যোগ করার জন্য, প্রতিটি লুপের জন্য ব্যবহৃত হলে, ":" মূলত "ইন" হিসাবে পড়া যায়।

তাই

for (String name : names) {
    // remainder omitted
}

"প্রতিটি নামের জন্য নামগুলি করতে হবে ..." পড়তে হবে


15

":" অন্তর্ভুক্ত না করার জন্য আপনি কীভাবে প্রতিটি লুপকে আলাদাভাবে লিখবেন?

ধরে নিচ্ছি যে listএটি একটি Collectionউদাহরণ ...

public String toString() {
   String cardString = "";
   for (Iterator<PlayingCard> it = this.list.iterator(); it.hasNext(); /**/) {
      PlayingCard c = it.next();
      cardString = cardString + c + "\n";
   }
}

আমার সেই প্রাসঙ্গিক পয়েন্টটি যুক্ত করা উচিত যা :এই প্রসঙ্গে অপারেটর নয়। একটি অপারেটর একটি অভিব্যক্তি মধ্যে একটি অপারেশন সম্পাদন করে, এবং ভিতরে কাপড় ( ... )একটি forবিবৃতি একটি অভিব্যক্তি না ... JLS অনুযায়ী।


আমার প্রশ্ন: কেন? দীর্ঘ পথ একই কাজ করছেন কেন?
ধনী

4
@ রিচএন - তিনি এটি করতে চান না, তিনি কীভাবে তা জানতে চান।
স্টিফেন সি

4
হোমওয়ার্ক নয়, আমি কীভাবে এটি দীর্ঘতর করতে হবে তা জানতে চাই যাতে যুক্তিটি বুঝতে পারি
লেবু

প্রকৃতপক্ষে আমার (খারাপ) বিশ্ববিদ্যালয়ে কম্পিউটার ইঞ্জিনিয়ারিং পড়ার সময়, তারা কখনও আমাদের কাছে জাভা কোর্সে (:) সম্পর্কে কিছুই শেখায়নি, পরে উদাহরণগুলি দেখে আমি এটি শিখতে এসেছি এবং দুর্ভাগ্যক্রমে, এখন আমার কোড করা খুব কঠিন is আমার দীর্ঘমেয়াদে
কার্লোস সানচেজ

আপনার ধরার দরকার নেই যে listএটি একটি উদাহরণ Collection; এটি অবশ্যই Iterableলুপের জন্য বর্ধিত অংশে ব্যবহার করতে সক্ষম কিনা এটির একটি উদাহরণ হতে হবে, এর অর্থ এটি আপনার iterator()পদ্ধতিতে উত্তরটিতে যে পদ্ধতিতে ডাকবে তা থাকবে।
ক্রু 24'19

1

লুপগুলি অবজেক্টগুলির একটি তালিকাতে পুনরাবৃত্তি করতে ব্যবহৃত হয়।

for (Object o: list)
{
    // o is an element of list here
}

for <item> in <list>পাইথন হিসাবে এটি মনে করুন ।


1

আপনার নির্দিষ্ট ক্ষেত্রে,

String cardString = "";
for (PlayingCard c : this.list)  // <--
{
    cardString = cardString + c + "\n";
}

this.listএকটি সংগ্রহ (তালিকা, সেট, বা অ্যারে), এবং সেই কোডটি cসংগ্রহের প্রতিটি উপাদানকে বরাদ্দ করে।

সুতরাং, যদি this.listসংগ্রহ "2" 2 এস "," 3 এইচ "," 4 এস "were হত cardStringতবে শেষে এই স্ট্রিংটি হবে:

2S
3H
4S

4
আপনার উত্তরের জন্য ধন্যবাদ. ":" ব্যবহার না করার জন্য এই কোডটি কীভাবে নতুন করে লেখা যায়?
লেবু

1

আপনি সাধারণত এটি টার্নারি অ্যাসাইনমেন্ট অপারেটরে দেখতে পাবেন;

বাক্য গঠন

variable =  `condition ? result 1 : result 2;`

উদাহরণ:

boolean isNegative = number > 0 ? false : true;

যা অন্যথায় প্রকৃতির "সমতুল্য"

if(number > 0){
    isNegative = false;
}
else{
    isNegative = true;
}

বিভিন্ন পোস্টারের দেওয়া উদাহরণ ব্যতীত,

আপনি এটিও ব্যবহার করতে পারেন: একটি ব্লকের জন্য একটি লেবেলকে ইঙ্গিত করতে যা আপনি চালিয়ে যান এবং বিরতিতে ব্যবহার করতে পারেন ..

উদাহরণ স্বরূপ:

public void someFunction(){
     //an infinite loop
     goBackHere: { //label
          for(int i = 0; i < 10 ;i++){
               if(i == 9 ) continue goBackHere;
          }
     }
}

4
আমি দুঃখিত, তবে এটি একটি ভয়াবহ উদাহরণ। আপনি বুলিয়ান কেন লিখবেন না isNegative = সংখ্যা> 0; ডাবল sgn = সংখ্যা> 0 এর মতো জিনিসগুলির জন্য টেরনারির অবস্থাগুলি ভাল? 1: 0;
ব্যবহারকারী 44242

@ ব্যবহারকারী 44242 হ্যাঁ আমি কেন এটি উদাহরণ দিয়েছি তা মনে নেই।
চূড়ান্তভাবে

4
@ ব্যবহারকারী 44242 এর মতো উদাহরণ দেখানো এটিকে সহজ এবং আরও ভাল করে রাখে যে শর্তাধীন অপারেটর কীভাবে কাজ করে। " আপনি বুলিয়ান কেন লিখবেন না ইসনেজিটিভ = সংখ্যা> 0; " কারণ এটি টার্নারি অপারেটর সম্পর্কে কিছুই প্রদর্শন করে না।
Kröw

1

এটি "কিছু" স্ট্রিংটি তিনবার মুদ্রণ করবে।

JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()};                   

for ( JLabel label : labels )                  
 {              
   label.setText("something");  

 panel.add(label);             
 }

4
এটি ফোরইচ লুপ হিসাবে উপরে যা বলেছিল
পি.এ.যায়াস্রি

1

যেহেতু বেশিরভাগ লুপের জন্য খুব অনুরূপ, জাভা প্রতিটি লুপের জন্য নামক লুপটি লেখার জন্য প্রয়োজনীয় কোডের পরিমাণ হ্রাস করার জন্য একটি শর্টকাট সরবরাহ করে।

প্রতিটি লুপের জন্য সংক্ষিপ্ত উদাহরণ এখানে:

for (Integer grade : quizGrades){
      System.out.println(grade);
 }    

উপরের উদাহরণে, কোলন (:) "" ইন "হিসাবে পড়া যায়। প্রতিটি লুপের জন্য সম্পূর্ণরূপে কুইজ গ্রেডে "প্রতিটি পূর্ণসংখ্যার উপাদান (গ্রেড নামে পরিচিত) হিসাবে পড়তে পারেন, গ্রেডের মান মুদ্রণ করুন"।


0

এটি লুপের জন্য নতুন সংক্ষিপ্ত হাতে ব্যবহৃত হয়

final List<String> list = new ArrayList<String>();
for (final String s : list)
{
   System.out.println(s);
}

এবং টেরিনারি অপারেটর

list.isEmpty() ? true : false;

আমি বুঝতে পারিনি যে এটি নতুন ছিল ... এটি কখন এলো?
বোস


4
ওহ ... এটি 6 বছর আগে ছিল ... আমার রেফারেন্সের ফ্রেমে নতুন নয়: ডি
itত্বিক বোস

4
আমি পিগলসের সাথে আছি - ছয় বছর মানে এটি প্রায় কার্যকালের ভোর হতে চলেছে।
জেমস মুর

0

কোলন আসলে এর সাথে মিলিতভাবে বিদ্যমান ?

int minVal = (a < b) ? a : b;

সমান:

int minval;
if(a < b){ minval = a;} 
else{ minval = b; }

প্রতিটি লুপের জন্যও:

for(Node n : List l){ ... }

আক্ষরিক:

for(Node n = l.head; n.next != null; n = n.next)

0

কোলন প্রতিটি লুপের জন্য ব্যবহার করছে, এই উদাহরণটি ব্যবহার করে দেখুন

import java.util.*;

class ForEachLoop
{
       public static void main(String args[])
       {`enter code here`
       Integer[] iray={1,2,3,4,5};
       String[] sray={"ENRIQUE IGLESIAS"};
       printME(iray);
       printME(sray);

       }
       public static void printME(Integer[] i)
       {           
                  for(Integer x:i)
                  {
                    System.out.println(x);
                  }
       }
       public static void printME(String[] i)
       {
                   for(String x:i)
                   {
                   System.out.println(x);
                   }
       }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.