2015-03-23 1 views
1

J'utilise le programme JavaScript suivant pour calculer les combinatoires.Exception JavaScript à l'exécution non interceptée (Rhino)

importPackage(java.io); 
importPackage(java.lang); 
importPackage(java.math); 
importPackage(java.util); 
var r = new BufferedReader(new InputStreamReader(System['in'])) 
var t = Integer.parseInt(r.readLine()); 
for(var i=0;i<t;i++) 
{ 
      var c=(r.readLine()).split("\\s+"); 
      var n=Integer.parseInt(c[0]); 
      var r=Integer.parseInt(c[1]); 
      System.out.println(""+(f(n)/f(r)/f(n-r))+"\n"); 
} 
function f(y) 
{ 
    var s=1; 
    for (var i = 2; i <= y;) 
    { 
     s*=i++; 
    } 
    return s; 
} 

Si je donne l'entrée suivante:

2 
45 42 
48 26 

Je reçois la bonne sortie pour le premier cas, mais pour le second cas, je reçois cette erreur.

14190 

js: uncaught JavaScript runtime exception: TypeError: Cannot find function readLine in object 42. 

Répondre

1

Java et JavaScript ont un comportement de portée légèrement différent. Votre problème est cette ligne:

var r=Integer.parseInt(c[1]); 

En Java, la boucle aurait une portée différente, mais la portée JS couvre l'ensemble de la fonction, de sorte que votre affectation à une autre variable r remplace la variable r qui stocke votre lecteur tampon . Donnez-leur un nom différent.