2010-02-19 3 views
14

Notre professeur nous fait faire une programmation de base avec Java, il a donné un site web et tout pour s'inscrire et soumettre nos questions, pour aujourd'hui je dois faire un exemple, je me sens comme je suis sur la bonne voie, mais je ne peux pas comprendre le reste. Voici la vraie question:Comment lire l'entrée avec plusieurs lignes en Java

**Sample Input:** 
10 12 
10 14 
100 200 

**Sample Output:** 
2 
4 
100 

Et voici ce que j'ai jusqu'à présent:

public class Practice { 

    public static int calculateAnswer(String a, String b) { 
     return (Integer.parseInt(b) - Integer.parseInt(a)); 
    } 

    public static void main(String[] args) { 
     System.out.println(calculateAnswer(args[0], args[1])); 
    } 
} 

Maintenant, je reçois toujours la réponse 2 parce que je lis la seule ligne, comment puis-je prendre toutes les lignes en compte? merci

Pour une raison étrange, chaque fois que je veux exécuter je reçois cette erreur:

C:\sonic>java Practice.class 10 12 
Exception in thread "main" java.lang.NoClassDefFoundError: Fact 
Caused by: java.lang.ClassNotFoundException: Fact.class 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:20 
     at java.security.AccessController.doPrivileged(Native M 
     at java.net.URLClassLoader.findClass(URLClassLoader.jav 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher. 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248 
Could not find the main class: Practice.class. Program will exit. 

Quelle que soit la version de réponse que je l'utilise, je reçois cette erreur, que dois-je faire?

Cependant, si je le lance dans Eclipse Exécuter en tant que> Exécuter Configuration -> arguments du programme

10 12 
10 14 
100 200 

Je ne vois aucun résultat

EDIT

J'ai fait quelques progrès, dans un premier temps Je recevais l'erreur de compilation, puis l'erreur d'exécution et maintenant je me trompe de réponse, donc quelqu'un peut-il m'aider ce qui ne va pas avec ceci:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.math.BigInteger; 

public class Practice { 

    public static BigInteger calculateAnswer(String a, String b) { 
     BigInteger ab = new BigInteger(a); 
     BigInteger bc = new BigInteger(b); 
     return bc.subtract(ab); 
    } 

    public static void main(String[] args) throws IOException { 
     BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); 
     String line; 

     while ((line = stdin.readLine()) != null && line.length()!= 0) { 
      String[] input = line.split(" "); 
      if (input.length == 2) { 
       System.out.println(calculateAnswer(input[0], input[1])); 
      } 
     } 
    } 
} 
+1

Est-ce que votre professeur comment il vous préciser attend d'obtenir l'entrée dans votre programme? À partir de la ligne de commande, lire à partir d'un fichier, tapé dans le programme pendant son exécution? – Nate

+0

@Nate umm il nous a donné un site web http://uva.onlinejudge.org donc nous nous inscrivons là lui donner nos noms d'utilisateur, et il s'attend à ce que nous résolvions un problème chaque jour ce qui est une bonne chose .. et puisque je ne peux pas obtenir cet exemple pour travailler sur mon ordinateur il n'y a aucun but de le soulever. Le problème que j'essaie de résoudre est '10055 - Hashmat the Brave Warrior' http://acm.uva.es/p/v100/10055.html –

Répondre

15

Je l'ai finalement obtenu, submited il 13 fois rejetés pour une raison quelconque, le 14 "le juge" a accepté ma réponse, la voici:

import java.io.BufferedInputStream; 
import java.util.Scanner; 

public class HashmatWarrior { 

    public static void main(String args[]) { 
     Scanner stdin = new Scanner(new BufferedInputStream(System.in)); 
     while (stdin.hasNext()) { 
      System.out.println(Math.abs(stdin.nextLong() - stdin.nextLong())); 
     } 
    } 
} 
+0

Utilisation de la classe Scanner est exactement ce que je cherchais, merci beaucoup –

1

Regardez dans BufferedReader. Si ce n'est pas assez général/de haut niveau, je recommande de lire le I/O tutorial.

+0

@Hank Gay son pas d'un fichier, il serait facile de faire que c'est à partir des arguments de la console –

+1

@Gandalf, vous pouvez le faire avec 'BufferedReader'. 'BufferedReader stdin = nouveau BufferedReader (new InputStreamReader (System.in));' –

8

Utilisez BufferedReader, vous pouvez le faire lire l'entrée standard comme ceci:

BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); 
String line; 

while ((line = stdin.readLine()) != null && line.length()!= 0) { 
    String[] input = line.split(" "); 
    if (input.length == 2) { 
     System.out.println(calculateAnswer(input[0], input[1])); 
    } 
} 
1

Beaucoup d'exercices d'étudiants utiliser Scanner parce qu'il a une variété de méthodes pour analyser les chiffres. Je viens commence habituellement avec un filtre orienté ligne idiomatiques:

import java.io.*; 

public class FilterLine { 

    public static void main(String[] args) throws IOException { 
     BufferedReader in = new BufferedReader(
      new InputStreamReader(System.in)); 
     String s; 

     while ((s = in.readLine()) != null) { 
      System.out.println(s); 
     } 
    } 
} 
0

Le problème que vous rencontrez en cours d'exécution de la ligne de commande est que, après votre fichier de classe vous ne mettez pas « .class ».

java Practice 10 12

devrait fonctionner - aussi longtemps que vous êtes quelque part java peut trouver le fichier .class.

Les problèmes de chemin de classe sont une toute autre histoire. Si java se plaint encore de ne pas trouver votre classe, allez dans le même répertoire que votre fichier .class (et il ne semble pas que vous utilisiez des paquets ...) Et essayer -

java -cp . Practice 10 12

+0

@Nate Je reçois toujours le même message d'erreur –

+0

Practice.class est dans le même répertoire que vous exécutez 'java -cp. Pratique 10 12' de? – Nate

-1
import java.util.*; 
import java.io.*; 

public class Main { 
    public static void main(String arg[])throws IOException{ 
     InputStreamReader isr = new InputStreamReader(System.in); 
     BufferedReader br = new BufferedReader(isr); 
     StringTokenizer st; 
     String entrada = ""; 

     long x=0, y=0; 

     while((entrada = br.readLine())!=null){ 
      st = new StringTokenizer(entrada," "); 

      while(st.hasMoreTokens()){ 
       x = Long.parseLong(st.nextToken()); 
       y = Long.parseLong(st.nextToken()); 
      } 

      System.out.println(x>y ?(x-y)+"":(y-x)+""); 
     } 
    } 
} 

Cette solution est un peu plus efficace que celle ci-dessus car elle prend le 2.128 et cela prend 1.308 secondes pour résoudre le problème.

+0

Comme il s'agit d'un exercice éducatif, il n'est pas nécessaire d'améliorer les performances. Lisibilité du code> performance! – Kuchi

-2
package pac001; 

import javax.swing.JFrame; 
import javax.swing.JOptionPane; 

public class Entry_box{ 



    public static final String[] relationship = {"Marrid", "Unmarried"}; 


    public static void main(String[] args) 
    { 
     //TAKING USER ID NUMBER 
      int a = Integer.parseInt(JOptionPane.showInputDialog("Enter ID no: ")); 
     // TAKING INPUT FOR RELATIONSHIP 
     JFrame frame = new JFrame("Input Dialog Example #3"); 
     String Relationship = (String) JOptionPane.showInputDialog(frame,"Select Your Relationship","Married", 
           JOptionPane.QUESTION_MESSAGE, null, relationship,relationship[0]); 



     //PRINTING THE ID NUMBER 
     System.out.println("ID no: "+a); 
     // PRINTING RESULT FOR RELATIONSHIP INPUT 
      System.out.printf("Mariitual Status: %s\n", Relationship); 

     } 
} 
1
public class Sol { 

    public static void main(String[] args) { 

    Scanner sc = new Scanner(System.in); 

    while(sc.hasNextLine()){ 

    System.out.println(sc.nextLine()); 

    } 
} 
} 
+1

Ajouter un peu si l'explication avec votre code serait bien. – Sakuto