2016-11-28 4 views
0

条件:Javaの - 入力2つの整数配列とプリント交流要素

  1. 両方の配列は、最初の配列は限り又は第二又はエラーメッセージ
  2. より長くなければならないため、またはエラー・メッセージ
  3. でなければなりません
  4. 第が長い第2のよりある場合、それは最初

例プリントし続けなければならない:所与SETF [] = 1,2,3,4,8及びセット[] = 5,6,7、それをプリント1,5,2,6,3,7,4,8,8

マイコードに問題があります:印刷してもう一度やり直しても、長い場合は最初の印刷を続行しません。

完全なコード(私は少し厄介なフォーマットに謝罪のウェブサイトは少しそれを台無しに。):

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'に変更した後は、インデックスが正しくないため、内部のifも変更する必要があります。次のように:

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] + " "); 
     } 
    } 
} 

私は別の方法でそれを解決しましたが、何か助けが必要な場合は案内してくれます。とにかく、これが役立つことを願って...

関連する問題