2010-11-23 13 views
19

शामिल नहीं है I जावा और ग्रहण में कुल नौसिखिया हूं। मैं बहुत मदद के लिए googled लेकिन अभी भी उलझन में। ग्रहण से मैं रन क्लिक करता हूं फिर जावा एप्लिकेशन का चयन करता हूं और मुझे यह त्रुटि तुरंत मिलती है। यहां मेरा स्रोत कोड है:जावा लॉन्च त्रुटि चयन में मुख्य प्रकार

import java.util.Arrays; 
import java.util.Scanner; 

public class SliceandDice { 
    void main(String args[]) { 
     System.out.println("This is the BIGGEST program console"); 
     System.out.println("Each input line will be a pair of numbers separated by a COMMA."); 
     System.out.println("First number must be an unsigned number less than 10000. Max example: 9999"); 
     System.out.println("Second number is the 'target' number."); 
     System.out.println("Example of an input line to be typed:"); 
     System.out.println(" 4721 , 75"); 
     for (int i = 1; i < 6; i++) // each time in this loop, we have a new 
            // set. 
     { 
      System.out.println("Type a pair of numbers according to the syntax rules above:"); 
      String iLine; // Declare a variable to hold the name. 
      Scanner in = new Scanner(System.in); 
      iLine = in.nextLine(); // Read one line from the console. 
      in.close(); // Note 2 
      NumberSet set = ParseRawInput(i, iLine); 
      if (set.IsValid()) { 
       System.out.println("Valid inputs. Card Number to tear apart:" + set.getCardNumber() 
         + "; Target Number: " + set.getTargetNumber()); 
       String cardNumber = set.getCardNumber(); 
       int target = set.getTargetNumber(); 
       AnalyzeNumber(cardNumber, target); // solve for this set of 
                // numbers 
      } else { 
       System.out.println("Invalid set of numbers. Enter in format: nnnn,tttt"); 
      } 
     } 
    } 

    private void AnalyzeNumber(String cn, int t) { 
     int n = cn.length(); 
     int m = n; 
     int sums = 4 + 3 + 2 + 1; 
     int[] possibleAnswers = new int[sums]; 
     int answer = 0; 
     for (int digits = 1; digits < m; digits++) { 
      possibleAnswers[answer] = PossibleAnswer(0, digits, cn); 
      answer++; 
     } 
     System.out.println("-----------"); 
     possibleAnswers[answer] = PossibleAnswer(1, 2, cn); 
     answer++; 
     possibleAnswers[answer] = PossibleAnswer(1, 3, cn); 
     answer++; 
     System.out.println("-----------"); 
     possibleAnswers[answer] = PossibleAnswer(2, 2, cn); 
     answer++; 
     System.out.println("-----------"); 
     int finalAnswer = FindBiggestNearTarget(possibleAnswers, t); 
     System.out.println("Best sum (closet to target) = " + String.valueOf(finalAnswer)); 
    } 

    private int PossibleAnswer(int extender, int lengthDigits, String cn) { 
     // extender => which digit position gets multilength adjustment 
     int n = cn.length(); 
     int[] number = new int[n]; // holds individual addends 
     int sum = 0; 
     int LEN = 1; // default length when we need it 
     String addends = ""; 
     int i; 
     if (extender == 0) { 
      i = 0; 
      while (i < n) { 
       addends += cn.substring(i, lengthDigits) + " + "; 
       number[i] = Integer.parseInt(cn.substring(i, lengthDigits)); 
       sum += number[i]; 
       i = i + lengthDigits; // always increment at least 1 position 
       if (i + lengthDigits > n) 
        lengthDigits = 1; 
      } 
      System.out.println(addends + " = " + String.valueOf(sum)); 
      return sum; 
     } 
     if (extender == 1) { 
      i = 0; 
      while (i < n) { 
       addends += cn.substring(i, LEN) + " + "; 
       number[i] = Integer.parseInt(cn.substring(i, LEN)); 
       sum += number[i]; 
       if (i == 0) { 
        i++; 
        LEN = lengthDigits; 
       } else if (i == 1) { 
        i = i + lengthDigits; // i = 3 (last number) 
        LEN = 1; 
       } else if (i == 2) { 
        i = 1; 
        LEN = 3; 
       } else { 
        i = n; // force exit of while loop 
       } 
       if (i + LEN > n) 
        LEN = 1; 
      } 
      System.out.println(addends + " = " + String.valueOf(sum)); 
      return sum; 
     } 
     if (extender == 2) { 
      i = 0; 
      while (i < n) { 
       addends += cn.substring(i, LEN) + " + "; 
       number[i] = Integer.parseInt(cn.substring(i, LEN)); 
       sum += number[i]; 
       i = i + LEN; // always increment at least 1 position 
       if (i == extender) { 
        LEN = lengthDigits; 
       } 
       if (i + LEN > n) 
        i = n; // force out of loop 
      } 
      System.out.println(addends + " = " + String.valueOf(sum)); 
      return sum; 
     } 
     return 0; 
    } 

    private int FindBiggestNearTarget(int[] possibles, int target) { 
     int[] sumArray = possibles; 
     Arrays.sort(sumArray); 
     // temporary variable for swapping values 
     int temp; 
     // reverse the array 
     for (int i = 0; i < sumArray.length/2; ++i) { 
      temp = sumArray[i]; 
      sumArray[i] = sumArray[sumArray.length - i - 1]; 
      sumArray[sumArray.length - i - 1] = temp; 
     } 

     for (int i = 0; i < sumArray.length; i++) { 
      if (sumArray[i] < target) { 
       return sumArray[i]; 
      } 
     } 
     return -1; // should not occur 
    } 

    public static NumberSet ParseRawInput(int i, String rawInput) { 
     NumberSet errorSet = new NumberSet(-1, "", 0); 
     // string[] stringArray = rawInput.Split(new char[] { ','}); 
     String[] stringArray = rawInput.toString().split(rawInput, ','); 
     if (stringArray.length != 2) 
      return errorSet; // ensure 2 tokens separated by comma 
     // work on 1st token: 
     String cardNumberString = stringArray[0].trim(); // trim any whitespace 
                 // from this token 
     if (cardNumberString.length() > 4) 
      return errorSet; // ensure token is 4 bytes or less 
     // declare token as integer 
     int cardNumber = Integer.parseInt(cardNumberString); 

     // work on 2nd token: 
     String targetNumberString = stringArray[1].trim(); // trim any 
                  // whitespace from 
                  // token 
     if (targetNumberString.length() > 4) 
      return errorSet; // ensure token is 4 bytes or less 

     int targetNumber = Integer.parseInt(targetNumberString); // convert into 
                   // int 

     NumberSet validSet = new NumberSet(i, cardNumberString, targetNumber); 
     return validSet; 
    } 
} 

class NumberSet { 
    // Java getter & setter 
    private String CardNumber; 
    private int TargetNumber; 
    private int SetNumber; 

    public int getSetNumber() { 
     return this.SetNumber; 
    } 

    public String getCardNumber() { 
     return this.CardNumber; 
    } 

    public int getTargetNumber() { 
     return this.TargetNumber; 
    } 

    public NumberSet(int sn, String cn, int t) { 
     this.SetNumber = sn; 
     this.CardNumber = cn; 
     this.TargetNumber = t; 
    } 

    public Boolean IsValid() { 
     if (this.SetNumber < 0) 
      return false; 
     return true; 
    } 
} 
+0

मैं एक बार अपने गलत 'मुख्य' को आवश्यक' मुख्य 'का नाम बदलने के लिए भूल गया। ;) – n611x007

+0

संभावित डुप्लिकेट [त्रुटि: चयन में मुख्य प्रकार नहीं है] (http://stackoverflow.com/questions/16225177/error-selection-does-not-contain-a-main-type) – jww

उत्तर

38

आप सी ++ में मुख्य विधि को परिभाषित नहीं कर सकते हैं।

जावा दुभाषिया के लिए, मुख्य विधि हमेशा सार्वजनिक और स्थैतिक होना चाहिए। इसलिए आपको अपना मुख्य विधि हस्ताक्षर

public static void main(String args[]) 

इसे आज़माएं, और आगे पूछने के लिए स्वतंत्र महसूस करें। :-)

+1

धन्यवाद .. प्रश्न "रात की लड़ाई" में देर रात को पोस्ट किया गया। अब मैं देखता हूं आपने 8 मिनट के भीतर मुझे जवाब दिया! वाह। मैं कुछ और प्रश्नों के साथ यहां वापस आऊंगा जो मुझे यकीन है। –

+1

आप हमेशा स्वागत करते हैं। – Mudassir

+1

ध्यान दें कि 'मुख्य' सभी निचले मामले हैं। (यह मुझे मिला, मैं थकावट दोष) –

12

एक नई परियोजना बनाएं और मौजूदा स्रोत फ़ोल्डर्स को इंगित करने के लिए बिल्ड पथ बनाएं। यह "चयन में मुख्य प्रकार नहीं है" त्रुटि को हल करेगा।

+0

यह कैसे करें? क्या आप अधिक स्पष्ट रूप से समझा सकते हैं? – oiyio

+1

मैं एक सुंदर अनुभवी जावा प्रोग्रामर हूं और यह मेरे लिए काम करता है। स्रोत फ़ोल्डर (src /) पर राइट-क्लिक करें जिसे आप उपयोग करना चाहते हैं और फिर "पथ बनाने के लिए जोड़ें" या "निर्माण पथ कॉन्फ़िगर करें" का चयन करें। यदि आप बाद वाले करते हैं, तो src/फ़ोल्डर निर्दिष्ट करें। –

1

मैंने भी इस समस्या का अनुभव किया और इसे हल कर सकता है। समाधान का अभी तक उल्लेख नहीं किया गया था।

मेरे मामले में मैं एक्सटेप के साथ एक्लिप्स में काम कर रहा हूं और मैंने परियोजना को मैवेन में परिवर्तित कर दिया है।

<classpathentry excluding="**" kind="src" output="target/classes" path="xtend-gen"> 

तो फिर तुम सिर्फ इस लाइन को हटाना और एक साफ निर्माण करने की जरूरत है: उसके बाद वहाँ अपने classpath फ़ाइल में एक स्रोत-बहिष्कार प्रविष्टि था।