2016-11-28 2 views
0

Conditions:java - Entrée 2 tableaux d'entiers et imprimer des éléments alternatifs

  1. deux réseaux doit être dans le message de commande ou d'erreur
  2. le premier réseau doit être aussi long ou plus long que le second message ou une erreur
  3. si la première est plus longue que la seconde doit continuer d'imprimer la première

Exemple: setf donné [] = 1,2,3,4,8 et eNSEMBLES [] = 5,6,7 il affiche 1, 5, 2, 6, 3, 7, 4, 8

Le problème avec mon code: Il va imprimer et alterner très bien, mais ne continuera pas à imprimer le premier si elle est plus longue.

code complet (je présente mes excuses pour le formatage légèrement désordre Le site vissé vers le haut un peu.): La raison pour laquelle il n'a pas continué à imprimer pour vous

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

Avez-vous vu la réponse? – guymaor86

Répondre

1

si le premier tableau est réside plus dans cette ligne de code:

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

Vous avez continué d'imprimer uniquement si les deux matrices de la même position étaient à zéro. Vous devriez vérifier ici 'OU' pas 'ET'. De plus, après avoir changé cette condition en 'OU', les ifs doivent également être changés, car les index ne sont pas corrects. Comme suit:

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

je l'aurais résolu d'une manière différente, et je peux vous guider si vous avez besoin d'aide. Quoi qu'il en soit, espérons que cela aide ...