कोलन (:) ऑपरेटर क्या करता है?


89

जाहिरा तौर पर जावा में कई मायनों में एक कोलन का उपयोग किया जाता है। किसी को भी यह क्या होता है समझा?

उदाहरण के लिए यहाँ:

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
Jonik

जवाबों:


193

जावा कोड में कई स्थानों पर कोलन का उपयोग किया जाता है:

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);

3
अच्छा - मुझे कुछ याद आया! और मुझे यह भी पता नहीं था कि आप इस तरह के सिद्धांतों को नाम दे सकते हैं, बहुत उपयोगी है।
क्लाउडी मारू

.NET (C #) से आते हुए, प्रश्न में संरचना के लिए निकटतम उपमा प्रत्येक के लिए होगी, जिसे आपने अच्छे तरीके से समझाया था।
रोजर

2
एक असफल assert"कार्यक्रम छोड़ना" नहीं है। यह एक फेंकता है AssertionError। यह केवल प्रोग्राम को बाहर निकलने का कारण होगा यदि इसे केवल शेष गैर-डेमॉन थ्रेड के ढेर पर फेंक दिया जाता है ... और पकड़ा नहीं गया।
स्टीफन सी

यदि आप सभी को शामिल करने का लक्ष्य रखते हैं, तो मैं डबल कोलन
जोड़ूंगा

1
इसके अलावा, विधि संदर्भों में एक डबल कोलन का उपयोग किया जाता है।
डैनियल एम।

34

कोई "कोलन" ऑपरेटर नहीं है, लेकिन दो स्थानों में कोलन दिखाई देता है:

1: टर्नरी ऑपरेटर में, जैसे:

int x = bigInt ? 10000 : 50;

इस मामले में, टर्नरी ऑपरेटर भावों के लिए 'अगर' के रूप में कार्य करता है। अगर bigInt सच है, तो x को इसके लिए 10000 दिए जाएंगे। यदि नहीं, तो 50. यहाँ उपनिवेश का अर्थ है "और"।

2: प्रत्येक लूप में:

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

यह बदले में प्रत्येक मान के लिए x सेट करता है। इसलिए यदि वैल में [१०, २०.३, ३०, ...] सम्‍मिलित है, तो पहले पुनरावृत्ति पर x १० होगा, दूसरे पर २०.३, आदि।

नोट: मैं कहता हूं कि यह एक ऑपरेटर नहीं है क्योंकि यह सिर्फ सिंटैक्स है। यह अपने आप में किसी भी अभिव्यक्ति में प्रकट नहीं हो सकता है, और यह सिर्फ मौका है कि दोनों के लिए प्रत्येक और टर्नरी ऑपरेटर एक बृहदान्त्र का उपयोग करते हैं।


दूसरी छमाही में मदद मिली, यह वास्तविक उत्तर होना चाहिए
erp

+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बयान के अंदर सामान एक अभिव्यक्ति नहीं है ... जेएलएस के अनुसार।


मेरा सवाल है: क्यों? एक ही काम लंबा रास्ता क्यों?
रिचएन

2
@ रीचेन - वह ऐसा नहीं करना चाहता, वह सिर्फ यह जानना चाहता है कि कैसे।
स्टीफन C

3
होमवर्क नहीं, मैं यह जानना चाहता हूं कि इसे लंबा कैसे करना है ताकि मैं तर्क को समझ सकूं
नींबू

वास्तव में मेरे (खराब) विश्वविद्यालय में, कंप्यूटर इंजीनियरिंग की पढ़ाई के दौरान, उन्होंने हमें कभी भी इसके बारे में कुछ नहीं सिखाया (:) जावा कोर्स में, मैं इसे बाद में उदाहरण देखकर सीखता हूं, और दुर्भाग्य से, अब इसे कोड करना मेरे लिए कठिन है मेरे दिमाग में चूंकि मैंने सभी प्रोजेक्ट्स को लंबे समय तक
कार्लोस सांचेज

आपको यह मानने की आवश्यकता नहीं है कि listइसका एक उदाहरण है Collection; यह एक उदाहरण होना चाहिए कि Iterableक्या यह लूप के लिए बढ़ाया में उपयोग करने में सक्षम है, जिसका अर्थ है iterator()कि आपके पास अपने जवाब में इसे कॉल करने की विधि होगी ।
1919

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एक संग्रह {"2S", "3H", "4S"} थे, तो cardStringअंत में यह होगा:

2S
3H
4S

1
आपके उत्तर के लिए धन्यवाद। ":" का उपयोग न करने के लिए इस कोड को फिर से कैसे लिखा जा सकता है?
नींबू

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;
          }
     }
}

2
मुझे खेद है, लेकिन यह एक भयानक उदाहरण है। आप बूलियन क्यों नहीं लिखेंगे। डबल सिन = नंबर> 0 जैसी चीजों के लिए टर्नरी की स्थिति अच्छी है? 1: 0;
user44242

@ user44242 योग्य हां मुझे यह भी याद नहीं है कि मैंने वह उदाहरण क्यों दिया।
अल्ट्राजोहन

1
@ user44242 एक उदाहरण दिखा रहा है जो इसे सरल और बेहतर दिखाता है कि सशर्त ऑपरेटर कैसे काम करता है। " आप बूलियन क्यों नहीं लिखेंगे। रचनात्मक = संख्या> 0; " क्योंकि यह टर्नरी ऑपरेटर के बारे में कुछ भी प्रदर्शित नहीं करता है।
Kröw

1

यह तीन बार "कुछ" स्ट्रिंग को प्रिंट करता है।

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

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

 panel.add(label);             
 }

1
यह वही है जो फॉरेच लूप के रूप में ऊपर कहा गया है
P.JAYASRI

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;

मुझे यह महसूस नहीं हुआ कि यह नया था ... यह कब आया?
रित्विक बोस


3
ओह ... यह 6 साल पहले था ... मेरे संदर्भ के फ्रेम द्वारा नया नहीं: डी
ऋत्विक बोस

2
मैं पिगल्स के साथ हूं - छह साल का मतलब है कि यह समय के आसपास व्यावहारिक रूप से है।
जेम्स मूर

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);
                   }
       }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.