2010-01-12 8 views
2

Ce que je suis en train de faire est que j'ai ce programme qui se lit dans un certain nombre, et ce nombre désigne le nombre de mots sont, par exemple:Un bug particulier que je ne peux pas sembler trouver

3 
red 
blue 
green 

Et puis imprime sur ce même texte, mais dans l'ordre inverse il serait

green 
blue 
red 

suivie d'une ligne vide indiquant au serveur que vous avez terminé avec ce problème spécifique. Mais j'ai l'impression d'avoir un bug dans mon code quelque part.

J'ai essayé de stocker les mots dans une liste de tableaux. J'ai utilisé une boucle for pour les stocker dans la liste et ensuite pour les imprimer dans l'ordre inverse, j'ai juste utilisé une autre boucle pour aller dans le sens inverse, en commençant par la fin de la liste allant au début. Lorsque j'exécute le programme à partir de l'invite de commande, il passe à la ligne de commande suivante comme si je l'avais pour compiler le programme, il n'y a pas d'erreur mais quand j'ai fait un test, en utilisant un programme de test I créé, il semble que le programme lit le numéro, puis va et imprime un tableau vide.

Il semblerait que les mots du serveur ne soient pas stockés dans le tableau et je ne suis pas sûr de ce que je fais mal. Je ne suis pas le meilleur programmeur donc toute aide serait grandement appréciée.

Le code:

import java.io.*; 
import java.util.*; 

public class Solution 
{ 
    public static void run(BufferedReader in, PrintWriter out) 
     throws IOException 
    { 
     int x = Integer.parseInt(in.readLine()); 

     while(x != 0) 
     { 
      ArrayList num = new ArrayList(); 

      for(int i = 0; i < num.size(); i++) 
      { 
       //String f = in.readLine(); 
       num.add(in.readLine()); 
      } 
      //System.out.println(num); 

      for(int i = num.size()-1; i > 0; i--) 
      { 
       out.println(num.get(i)); 

       //x = Integer.parseInt(in.readLine()); 
       System.out.println(); 
      } 
      break; 
     } 
     out.flush(); 
    } 
} 
+0

travail à domicile? ....... –

+1

Est-ce votre code entier? Où est «main»? –

Répondre

3

La boucle while arrête jamais

EDIT: Oops pas, ce n'est pas vrai, mais quel est le point d'avoir une boucle while qui fonctionne une fois? Vous mettez une pause à la fin, alors peut-être pourriez-vous refactoriser cela à un si? Peut-être un garde?

9
ArrayList num = new ArrayList(); 

for(int i = 0; i < num.size(); i++) 

signifie que vous allez de 0 à ... 0!

for(int i = 0; i < x; i++) 

serait mieux.

2

La taille de num ici est 0. Vous devez utiliser « x » au lieu de num.size()

 for(int i = 0; i < num.size(); i++) 
     { 
      //String f = in.readLine(); 
      num.add(in.readLine()); 

     } 
0

Cela pourrait ne pas être exactement ce que vous avez fait .. un peu différent ..: -)

int x = Integer.parseInt(in.readLine()); 
String[] arr = new String[x]; // Edited :: Slip of mind - Thanks Pgras  
for(int i=0;i<x;i++){ //input x number of words and store.. 
arr[i] = in.readLine(); 
} 

for(i=x-1;i>=0;i--){ //Display words in reverse order 
System.out.println(arr[i]); 
} 
+0

Pourquoi n'écrivez-vous pas String [] arr = new String [x]; ??? – pgras

Questions connexes