2016-09-28 11 views
-2

私は未知のサイズの配列を持っています。Java配列を2つの異なる配列に分割し、配列に数値を追加する方法

配列の前半が中心値(最大値)に向かって漸進的に増加するかどうかを確認する必要がありますが、中心値の後では数値の値が徐々に小さくなります。

私は、配列の長さを分割するのが最善の方法だと思っていましたが、奇数であるため、配列に0.5を追加する必要がありますが、これは可能ではないようです。

int N = Integer.parseInt(args[0]); 

int[] array = new int[N]; 

int x = array.length; 

//split into new arrays 
int[] a = new int [x/2]; 
int[] b = new int [x/2]; 

if(a<b && b<c){ 
    System.out.println("Has a peak"); 
} else { 
    System.out.println("Doesnt have a peak"); 
} 
+0

それは、配列を単にループすることが容易にかつを追跡するかもしれない - それは何も存在しない場合は、パラメータとして配列を受け取り、trueを返す配列はピークが含まれている場合(あなたの説明による)とfalse最初に値が下がります。その後、それが落ちたままになっていることを確認します。それ以外の場合は、ピークがありません。 –

答えて

0

中央値は、子配列の1つにある必要はありません。オリジナルがN = 11なら、あなたは物事を5-1-5と分けることができます。しかし、Bob Brinksのコメントによれば、実際には別々の配列を作成する必要はなく、適切なインデックスにはintを使用し、配列自体をループして各セルがルールに従うことを確認するだけです。ループの前に "ok"というブール値をtrueに設定し、配列インデックスがテストに失敗した場合はfalseに設定します。

中央のセルは常に配列[N/2]になります(N/2は常に切り捨てられます)。配列[1]から配列[N/2]までの各セルを確認し、それぞれが以前のものよりも大きいかどうか確認することができます。配列[N/2 + 1]から配列[N-1]までの各セルを調べて、それらのそれぞれが前の配列よりも小さいかどうかを確認する2番目のループがあります。ループの後で、 "ok"がまだ真であるかどうかがわかります。その場合、セルのどれもがルールを破っていません。

注目すべき主な点は、ループのたびにセルインデックスを印刷し、それらがすべて正しい順序(開始点と終了点)でトリガーされていることを確認することです。あなたがあなたのFORループをどのように書いているかという問題、もう一つは、行内の2つの等しい値が許されるかどうかです。 > =と< =を使用して比較チェックを行います。プログラムのデバッグバージョンでは、配列の長さ、ループインデックスなどを出力します。基本的には、どのような値でも識別できます。 「ここに問題があるよ」とすべてのプログラム構造がどんなに簡単に機能するのかを知ることができます。

0

この機能を試してください。

public static boolean isPeak(int[] array){ 
    int length = array.length; 
    int prev=array[0]; 
    for(int index=1;index<length;index++){ 
     if(index<length/2+1){ 
      if(array[index] < prev){ 
       return false; 
      } else {prev=array[index];} 
     } else { 
      if(array[index] > prev){ 
       return false; 
      } else {prev=array[index];} 
     } 
    } 
    return true; 
} 
関連する問題