2016-11-28 1 views
0

조건 :자바 - 입력이 개 정수 배열 및 인쇄 교류 요소

  1. 두 배열 순서 또는 오류 메시지에 있어야합니다을
  2. 첫 번째 배열이어야합니다만큼 또는 두 번째 또는 오류 메시지
  3. 이상
  4. 제 긴 번째 이상의 경우는 제

예 계속 인쇄한다 : 주어진 setf의 [] = 1,2,3,4,8 및 집합 [] = 5,6,7를 인쇄 1, 5, 2, 6, 3, 7, 4, 8

내 코드의 문제점 : 인쇄 및 대체는 좋지만 길어지면 첫 번째 인쇄를 계속 인쇄하지 않습니다.

전체 코드 (I 약간 지저분한 포맷에 대해 사과 웹 사이트는 약간을 망쳐.) :

package mergearrays; 
import java.io.*; 
import java.lang.*; 
import java.util.*; 

public class MergeArrays { 
public static void main(String[] args) { 
    //variables 
    boolean done = false; 
    boolean error = false; 
    int inpval = 0; 
    int i = 0; //will be setF.length 
    int j = 0; //will be setS.length 
    //arrays 
    int [] vals = new int[20000]; 

    //ask user 
    System.out.println("Enter the values for the first array, up to 10000  values, enter zero or a negative number to quit"); 

    //input array 
    Scanner scan = new Scanner(System.in); 
    while(!done) { 
     inpval = scan.nextInt(); 
     if (inpval > 0) { 
      vals[i] = inpval; 
      i++; 
     } 
     else { 
      done = true; 
     } 
    } 
    done = false; 
    System.out.println("Enter the values for the second array, up to 10000 values, enter zero or a negative number to quit"); 
    while(!done) { 
     inpval = scan.nextInt(); 
     if (inpval > 0) { 
      vals[j+i+1] = inpval; 
      j++; 
     } 
     else { 
      done = true; 
     } 
    } 
    //new arrays 
    int [] setF = new int[10000]; 
    int [] setS = new int[10000]; 

    //copy vals into setF and setS 
    System.arraycopy(vals, 0, setF, 0, i); 
    System.arraycopy(vals, i+1, setS, 0, i+j+1); 

    //check for order 
    for (int p = 0; p < i - 1; p++) { 
     if (setF[p] > setF[p+1]) { 
      error = true; 
     break; 
     } 
    } 
    for (int b = 0; b < j - 1; b++) { 
     if (setS[b] > setS[b+1]) { 
      error = true; 
     break; 
     } 
    } 
    //print first array 
    System.out.print("\n First Array: "); 
    for(int q = 0; q < i; q++) { 
     System.out.print(setF[q] + " "); 
    } 
    //print second array 
    System.out.print("\n Second Array: "); 
    for(int m = 0; m < j; m++) { 
     System.out.print(setS[m] + " "); 
    } 

    //print the final set 
    if(i >= j && error == false){ 
     System.out.print("\n Merged Array: "); 
     for(int n = 0; n <= i+j; n++) { 
      if(setF[n] != 0 && setS[n] !=0) { 
       if(n <= j) { 
        System.out.print(setF[n] + " "); 
        System.out.print(setS[n] + " "); 
       } 
       else if(n > j && n <= i){ 
        System.out.print(setF[n] + " "); 
       } 
      } 
     } 
    } 
    //error message 
    else { 
     System.out.print("\n ERROR: Array not in correct order"); 
     } 
    } 
} 
+1

대답을 봤어? – guymaor86

답변

1

첫 번째 배열이 긴 경우에 당신을 위해 인쇄를 계속하지 않은 이유에있다 이 코드 란 :

if (setF[n] != 0 && setS[n] != 0) { 

같은 위치의 두 배열이 모두 0 인 경우에만 인쇄를 계속합니다. 'OR'이 아닌 'OR'을 여기에서 확인해야합니다. 또한 해당 조건을 'OR'로 변경 한 후 인덱스가 올바르지 않기 때문에 내부의 ifs도 변경해야합니다. 다음과 같이 :

System.out.print("\n Merged Array: "); 
for (int n = 0; n <= i + j; n++) { 
    if (setF[n] != 0 || setS[n] != 0) { 
     if (n < j) { 
      System.out.print(setF[n] + " "); 
      System.out.print(setS[n] + " "); 
     } else if (n < i) { 
      System.out.print(setF[n] + " "); 
     } 
    } 
} 

나는 다른 방식으로 해결했을 것이며, 도움이 필요하면 안내 할 수 있습니다. 어쨌든, 희망이 도움이 ...