Forいくつかの背景については、問題文があります。配列内の充填のストール(Big Java Ex 7.22)
トイレで男性は一般的に空いた場所の最も長いシーケンスの 中央を占有することによって、既に占有屋台から自分の距離を最大化するために を好むことをよく研究事実です。たとえば、 は、10個のストールが空である状況を考慮します。
_ _ _ _ _ _ _ _ _ _最初の訪問者は、中間位置を占めるであろう。
_ _ _ _ _ X _ _ _ _次の訪問者は、空き領域の中央においてであろう左。
_ _ X _ _ X _ _ _ _
ストールの数を読み出し、ストールは、充填時に1になったときに上記で与えられた形式で図をプリントアウトするプログラムを書きます。ヒント:ブール値の配列を使用して、ストールが占有されているかどうかを示します。
私はまた、私が大部分を理解している解決策を見つけましたが、ちょっとした理解に問題があります。ここでは、
import java.util.Scanner;
class StallLogic
{
public void printStalls(boolean [] b)
{
for(boolean s:b)
{
System.out.print((s?"X" : "_") + " ");
}
System.out.print("\n");
}
public boolean giveFlag(boolean [] b)
{
for(boolean s : b)
{
if(!s) return false;
}
return true;
}
public int getLongest(boolean [] b)
{
int length = 0, temp = 0;
int len = b.length;
for(int i = 0; i < len ; i++)
{
if (b[i] == false)
{
temp++;
}
else{
temp = 0;
}
if (length < temp)
length = temp;
}
return length;
}
public int checkIndex(boolean [] b)
{
int length = 0 , temp = 0, ind = 0;
int len = b.length;
for (int i = 0 ; i < len ; i++)
{
if(b[i] == false)
{
temp++;
}
else{
temp = 0;
}
if (length < temp)
{
ind = i -length;
length = temp;
}
}
return ind;
}
public void findStalls(boolean [] b)
{
int loc = checkIndex(b);
int len = getLongest(b);
int ind = loc + len/2;
b[ind] = true;
}
}
public class checkStall
{
public static void main(String [] args)
{
StallLogic stallin = new StallLogic();
System.out.print("Enter number of stalls");
Scanner in = new Scanner(System.in);
int i = in.nextInt();
boolean [] stalls = new boolean [i];
while(!stallin.giveFlag(stalls))
{
stallin.findStalls(stalls);
stallin.printStalls(stalls);
}
}
}
マイ闘争
私は悩みを抱えているが、checkIndex
のポイントは本当に何であるかを理解しています。私はgetLongest
ことを理解し、私たちは、左側がgetLongest
と_
より多くを持っていることを確認し_ _ _ _ _ X _ _ _ _
に例えば最も連続_
年代
を持っているのArrayListの部分を教えてくれる。今問題はX
を置くための実際のインデックスが必要なことです。私たちのプログラムは、それを既存のXのすべての左側に置くべきか、それとも右側に置くのかをどのように知っていますか?これは私がcheckIndex
が来ることを示しています。
特に私が混乱しているのは、何個あるかを特定し、それを特定のインデックスで追加している理由です。 I. int ind = loc + len/2;
ここでcheckIndex
とint ind = loc + len/2,
は正確に何をしていますか?私は実現していないいくつかのアルゴリズムはありますか?
標準の分裂征服アルゴリズムと思われます。あなたは中点式を理解していませんか? –
このような練習のポイントは、理解していない解決策を盗むのではなく、自分の解決策を考え出すことです。あなたに最高のことを教える解決策が登場しています。 – Andreas
私は試していないなら、私はこの質問をしなかったでしょう。私がそれを解決できなかったので、尋ねる全体のポイントがあります。 –