2017-12-06 6 views
0

私は0から10000までの配列を持っています。 問題 そして、私は3または4またはその両方を含む数だけをフィルタリングする必要があります。例えば ...それよりも3,4,33,44,333,444,343,434,334文字列フィルタリング..いずれか...選択された文字のいずれかまたは両方のみを含む

技術が、私はコード内のいくつかのミスを犯していながら、私が試した.. \ 私は...まだ出力が届きません。 ( 改善されたコードは

import java.util.*; 

import static java.lang.Syste m。*; パブリッククラス麻痺{

public static void main(String[] args) { 
    int num,c,cum; 
    int i; 
    Scanner in = new Scanner(System.in); 
    out.println(3/10); 

    out.println("How many elements u need to put in this array?"); 
    num=in.nextInt(); 
    int[] ray1 = new int[num]; 
    List<String> l1 = new LinkedList<String>(); 
    for (c=0;c<num;c++) 
    { 


     ray1[c]=c; 
    } 

      for(i=1;i<num;i++) 
      { 
     boolean baabu=true; 
       do { 
        cum=ray1[i]; 
        int lastdig = cum%10;  
        if(lastdig!=3||lastdig!=4) 
        { 
         baabu=false; 
        } 
        cum=cum/10; 
       } 
       while(cum>0&&baabu); 
       if(baabu) 
       { 
        String ad = String.valueOf(ray1[i]); 
        l1.add(ad); 
       } 



      } 
      printme(l1); 


} 

public static void print (int[] array) 
{ 
    for(int xc:array) 
     out.println(xc); 
} 
public static void printme (List<String> l1) 
{ 
    for(String yc:l1) 
     out.println(yc); 
} 

}

+0

基数ソート技術を用いることができます。正確に基数ソートではありません。 –

+0

答えから何かを適応させようとしたときにコードが機能しないことが分かった場合は、コードをよく読んでください。特に、 'lastdig!= 3 || lastdig!= 4'と評価されるものは何ですか?私の答えに相当するコードは何をしていますか? (それだけではない) –

+0

Btw、元のコードを削除する質問を編集しないでください。これはゴールポストを動かすだけであり、編集前に書かれた回答はもはや意味をなさない。しかし、すべての手段で質問の終わりに追加します。 –

答えて

3

チェック最後の数字は、3又は4である場合:それがある場合、10で番号を分割し、次の桁をチェックします。それ以外の場合は、番号を破棄します。文字のリストとして文字列の

boolean add = true; 
do { 
    int lastDigit = num % 10; 
    if (lastDigit != 3 && lastDigit != 4) { 
    add = false; 
    } 
    num /= 10; 
} while (add && num > 0); 

if (add) { 
    // Add to list. 
} 
+0

私の解決策よりも効率的です。 –

+0

私はstackexchangeとjavaプログラミングに新しいです。申し訳ありません。 あなたのアイデアが働いた... 6時間後のように私は結果を得ています。お友達 – Ganapathy

0

と思いますが、例えば3435は3,4,3,5と39が3,9です。文字列内の文字を繰り返し処理し、それぞれが3または4であることを確認する必要があります。コードは3と4の特定の組み合わせをチェックしますが、すべての可能な列挙を処理することはできません。

0

すでに文字列として数字を処理しているので、{3,4}の文字列を見つけるための最も簡単な方法は、正規表現を照合することによってである "^ [34] + $"

Pattern threeFourStrings = Pattern.compile("^[34]+$"); 
... 
if (threeFourStrings.matcher(ad).matches()) { 
    l1.add(ad); 
} 

しかし、 すべて {3,4}文字列を最大10000(つまり4桁まで)にする必要があるため、にするとはるかに効率的です。 How to get all possible n-digit numbers that can be formed using given digits?

(もちろん2桁しかないので "3"と "4"の場合は、0から1111までの2進数をリストし、 "0"を転記するとさらに効率的かもしれません。 。すべてのために「4」から「3」と「1」)

0

このメソッドを使用し(それは私のために働いていた)配列にint型:

public static String myMethod(int num){ 

String str = String.valueOf(num); 

String ns =""; 
for (int i=0; i<str.length(); i++) { 
if (str.substring(i, i+1).equals("3")) 
{ 
    ns += 3; 
} 

if (str.substring(i, i+1).equals("4")) 
{ 
    ns += 4; 
} 
} 
return ns; 

} 
関連する問題