简体   繁体   English

如何在Java中读取多行输入

[英]How to read input with multiple lines in Java

Our professor is making us do some basic programming with Java, he gave a website and everything to register and submit our questions, for today I need to do this one example I feel like I'm on the right track but I just can't figure out the rest. 我们的教授正在让我们用Java做一些基本的编程,他给了一个网站以及注册和提交问题的一切,今天我需要做一个例子我觉得我走在正确的轨道但我不能弄明白其余的。 Here is the actual question: 这是实际问题:

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

**Sample Output:**
2
4
100

And here is what I've got so far : 这是我到目前为止所得到的:

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

Now I always get the answer 2 because I'm reading the single line, how can I take all lines into account? 现在我总是得到答案2因为我正在阅读单行,我怎样才能考虑所有行? thank you 谢谢

For some strange reason every time I want to execute I get this 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.

Whatever version of answer I use I get this error, what do I do ? 无论我使用什么版本的答案,我都会收到此错误,我该怎么办?

However if I run it in eclipse Run as > Run Configuration -> Program arguments 但是如果我在eclipse中运行它运行>运行配置 - >程序参数

10 12
10 14
100 200

I get no output 我没有输出

EDIT 编辑

I have made some progress, at first I was getting the compilation error, then runtime error and now I get wrong answer, so can anybody help me what is wrong with this: 我已经取得了一些进展,起初我得到了编译错误,然后是运行时错误,现在我得到了错误的答案,所以任何人都可以帮我解决这个问题:

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

I finally got it, submited it 13 times rejected for whatever reasons, 14th "the judge" accepted my answer, here it is : 我终于得到了它,无论出于何种原因,它被拒绝了13次,第14次“法官”接受了我的回答,这里是:

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

Use BufferedReader , you can make it read from standard input like this: 使用BufferedReader ,您可以从标准输入读取,如下所示:

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

Look into BufferedReader . 查看BufferedReader If that isn't general/high-level enough, I recommend reading the I/O tutorial . 如果这不是一般/高级,我建议阅读I / O教程

A lot of student exercises use Scanner because it has a variety of methods to parse numbers. 许多学生练习使用Scanner因为它有多种方法来解析数字。 I usually just start with an idiomatic line-oriented filter: 我通常只是从惯用的面向行的过滤器开始:

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);
        }
    }
}
 public class Sol {

   public static void main(String[] args) {

   Scanner sc = new Scanner(System.in); 

   while(sc.hasNextLine()){

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

  }
 }
}

The problem you're having running from the command line is that you don't put ".class" after your class file. 您从命令行运行的问题是您没有在类文件后面添加“.class”。

java Practice 10 12

should work - as long as you're somewhere java can find the .class file. 应该工作 - 只要你在某个地方,java就可以找到.class文件。

Classpath issues are a whole 'nother story. 类路径问题是一个完整的'其他故事。 If java still complains that it can't find your class, go to the same directory as your .class file (and it doesn't appear you're using packages...) and try - 如果java仍然抱怨它找不到你的类,那么转到与.class文件相同的目录(并且它看起来你没有使用包...)并尝试 -

java -cp . Practice 10 12

The easilest way is 最简单的方法是

import java.util.*;

public class Stdio4 {

public static void main(String[] args) {
    int a=0;
    int arr[] = new int[3];
    Scanner scan = new Scanner(System.in);
    for(int i=0;i<3;i++)
    { 
         a = scan.nextInt();  //Takes input from separate lines
         arr[i]=a;


    }
    for(int i=0;i<3;i++)
    { 
         System.out.println(arr[i]);   //outputs in separate lines also
    }

}

} }

This is good for taking multiple line input 这对于多线输入很有用

import java.util.Scanner;
public class JavaApp {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        String line;
        while(true){
            line = scanner.nextLine();
            System.out.println(line);
            if(line.equals("")){
                break;
            }
        }
    }  
}
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)+"");
        }
    }
}

This solution is a bit more efficient than the one above because it takes up the 2.128 and this takes 1.308 seconds to solve the problem. 这个解决方案比上面的解决方案更有效,因为它占用了2.128,这需要1.308秒来解决问题。

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

        }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM