2010-02-19 32 views
14

Nuestro profesor nos está haciendo hacer una programación básica con Java, dio un sitio web y todo para registrar y enviar nuestras preguntas, para hoy tengo que hacer un ejemplo, siento que Estoy en el camino correcto, pero no puedo entender el resto. Aquí está la pregunta real:Cómo leer la entrada con múltiples líneas en Java

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

**Sample Output:** 
2 
4 
100 

Y aquí es lo que tengo hasta ahora:

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

Ahora siempre me dan la respuesta 2 porque yo estoy leyendo la línea única, ¿cómo puedo tomar todas las líneas en cuenta? gracias

Por alguna extraña razón, cada vez que quiero para ejecutar me sale este error:

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. 

Sea cual sea la versión de respuesta que utilizo me sale este error, ¿qué hago?

Sin embargo, si la funciono en Eclipse Ejecutar como> Configuración Ejecutar -> argumentos de programa

10 12 
10 14 
100 200 

me sale ninguna salida

EDITAR

me han hecho algunos progresos, en un primer momento Estaba obteniendo el error de compilación, luego el error de tiempo de ejecución y ahora recibo una respuesta incorrecta, así que ¿alguien puede ayudarme? ¿Qué hay de malo en esto?

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

especificó su profesor cómo espera que usted pueda obtener la entrada en su programa? Desde la línea de comandos, lee de un archivo, ingresado en el programa mientras se está ejecutando. – Nate

+0

@Nate umm él nos dio un sitio web http://uva.onlinejudge.org así que nos registramos allí le damos nuestros nombres de usuario, y él espera que resolvamos un problema cada día, lo cual es algo bueno ... y como no puedo obtener este ejemplo para trabajar en mi computadora, no hay ningún propósito de sumbo. El problema que estoy tratando de resolver es '10055 - Hashmat the Brave Warrior' http://acm.uva.es/p/v100/10055.html –

Respuesta

15

finalmente lo tengo, Inscrito en la que 13 veces rechazadas por las razones que sean, 14a "el juez" aceptó mi respuesta, aquí está:

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

El uso de la clase de escáner es exactamente lo que estaba buscando, muchas gracias –

1

Mire en BufferedReader. Si eso no es lo suficientemente general/de alto nivel, recomiendo leer el I/O tutorial.

+0

@Hank Gay no es de un archivo, sería fácil de hacer que es desde los argumentos de la consola –

+1

@Gandalf, puedes hacer esto con 'BufferedReader'. 'BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));' –

8

Uso BufferedReader, puede hacer que lee de la entrada estándar como esto:

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

Una gran cantidad de ejercicios de los estudiantes usar Scanner porque tiene una variedad de métodos para analizar los números. Por lo general sólo a empezar con un filtro de línea por línea idiomática:

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

El problema que está teniendo que va desde la línea de comandos es que usted no pone ".class" después de que su archivo de clase.

java Practice 10 12

debería funcionar - el tiempo que estás en un lugar de Java puede encontrar el archivo .class.

Los problemas de Classpath son toda una historia. Si java todavía se queja de que no puede encontrar su clase, vaya al mismo directorio que su archivo .class (y no parece que esté usando paquetes ...) Y tratar -

java -cp . Practice 10 12

+0

@Nate Todavía recibo el mismo mensaje de error –

+0

Es Practice.class en el mismo directorio que está ejecutando 'java -cp. Practica 10 12' desde? – 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)+""); 
     } 
    } 
} 

Esta solución es un poco más eficiente que la anterior porque ocupa el 2.128 y esto demora 1.308 segundos para resolver el problema.

+0

Como se trata de un ejercicio educativo, no hay necesidad de mejorar el rendimiento. Lectura de código> rendimiento! – 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

Agregando un poco si la explicación con su código sería agradable. – Sakuto

Cuestiones relacionadas