2014-11-03 6 views
0

안녕하십니까, 3 개의 문자 (X, O 및 공백 "")로 채워진 격자 배열을 인쇄해야하는 문제가 있습니다. 이러한 문자는 사용자가 특정 비율 (X와 O는 항상 동일 함) 만 차지하도록 지정됩니다. 나는 배열에 대해 매우 날카로운 것이 아니므로, 문제를 배열 방식으로 평가하는 방법이나 배열이이 경우에 필요한지 정확히 알 수는 없습니다.자바 : 특정 문자가 그리드의 일정 비율 만 차지하도록 지정된 2D 문자 배열을 설정하는 방법은 무엇입니까?

저는 Math.Random을 통합하고 만약에 그것에 대해 갈 경우를 통해 일종의 케이스 시스템을 사용함으로써이 문제에 접근했습니다. 내 문제는 문자의 인쇄를 제한하는 방법이 전적으로 확실하지 않다는 것입니다.

공공 정적 무효 assignCellTypes는 (문자 [] [] 조직, INT percentBlank, INT percentX) {

유래의 규칙과 일반 ​​예절 당으로
int n = 5; 
    int i; 
    int j; 
    char[][] box = new char [n][n]; 
    int a = 0; 
    int b = 0; 
    int c = 0; 

    for (i = 0; i < n; i++) { 
     for (j = 0; j< n; j++) { 
      double q = Math.random(); 
      if (q >= .5 && a <= percentBlank) { 
       System.out.print(" "); 
       a = a + 1; 

      }else if (q <= .5 && q >= .25 && b/(n*n) <= percentX) { 

       System.out.print("O"); 
       b = b + 1; 
      } else if (q <= .25 && c/(n*n) <= percentX) { 
       System.out.print("X"); 
       c = c + 1; 
      } 
     } 
     } System.out.println(); 

    } 

, 방금 이미 넣어하려면 나는이 문제에 대한 답을 밝힐 누군가를 찾고 있지 않다. 나는이 형식을 사용하기 위해 사용할 수있는 형식 또는 몇 가지 다른 접근 방법이 있는지, 그리고이 문제의 배열 부분을 머리에 감쌀 수 있도록 약간의 팁 또는 2 개가 있는지 알고 싶습니다. 이 도움을 받으려면 대단히 감사하게 생각합니다. 지금은 며칠 동안이 일을 열심히 시도했지만 아무 것도하지 않고 많이 올랐습니다. 고급 시간 내 주셔서 감사합니다. 당신이 할 수있는

+0

, 당신은 2 가지 방법으로 작업 할 수 있습니다 1 배열'box [] []'에 값을 저장하고 출력한다. 2. 콘솔 출력에 직접 연결하십시오. – SkyMaster

답변

0

우선은 다음과 같습니다

N = 5, 매트릭스는 다음 25 개 항목이 저장 될 5 × 5 있도록.

경우 percentX = 30 % 다음 itemsX = (int)를 Math.rint ((N *의 않음) * (percentX/100))

경우 percentBlank = 40 % 다음 itemsBlank = (int)를 Math.rint ((n 개의 * n을) * (percentBlank/100))

그래서 우리가 itemsO = (n 개의 * n을 계산할 수) - (itemsBlank + itemsX는)

이 당신에게 당신이해야 할 항목의 수를 줄 것이다 행렬에있는 각 유형 X, O 또는 공백.

당신은 카운터를 초기화해야합니다

 int countBlank int = 0; 
    int countX = 0; 
    int countO = 0; 

우리는 무작위로 문자 X, O 또는 보호의 종류를 얻을. 우리는 사용

int q = (int) (Math.random()*3); 

이 0과 2 사이의 정수를 반환합니다 - 내가보기로> [0, 1, 2]

if (q == 0) { // We obtained a Blank, add +1 to the counter and store or print to the console the character ' ' 
    if (countBlank < itemsBlank) { 
     System.out.print("' ' "); // Or box[i][j]=' ' 
     countBlank +=1; 
    } else { 
     j-=1; // If the quota is reached Blank, subtract 1 from j to try to get other character in that position in the array. 
    }       
} 
if (q == 1) { // We obtained a 'O' 
    if (countO < itemsO) { 
     System.out.print("'O' "); 
     countO+=1; 
    } else { 
     j-=1; 
    }  
} 
if (q == 2) { // We obtained a 'X' 
    if (countX < itemsX) { 
     System.out.print("'X' "); 
     countX+=1; 
    } else { 
     j-=1; 
    }  
}  
+0

이것은 나를 위해 거대한 도움이되었습니다. 심지어 첫 번째 항목을 통해 문자를 많은 양의 항목으로 나누라고했습니다. 나는 Math.Random을 사용하는 유사한 할당량 시스템을 설계하는 결과를 얻었고, 논리에 관해서는 이것에 매우 가깝게되었다. – Akkere

+0

대단히 감사합니다! (Enter를 치고 그 의견을 너무 일찍 보내라는 뜻이 아닙니다.) – Akkere