当前位置: 首页 > 知识库问答 >
问题:

扫描程序方法:next()vs nextLine()[duplicate]

裴硕
2023-03-14

我承认,我已经研究了很多(类似的)问题,但我似乎无法理解我为一个基本的SPOJ问题(http://www.SPOJ.com/problems/onp/)编写的以下代码中的上下文用法(http://www.SPOJ.com/problems/onp/):

import java.io.*;
import java.util.Stack; 
import java.util.Scanner;


public class onp1 {

    public static String postfixString(String expression) {

        // Stack <Character> valueStack = new Stack <Character>();
        Stack <Character> operatorStack = new Stack <Character>();
        String output = "";
        char[] tokens = expression.toCharArray();

        for(char c : tokens) {

            if(c == '('){
                continue;
            }

            else if(c == '+' || c == '-' || c == '*' || c == '/' || c == '^') {
                operatorStack.push(c);
                continue;
            }

            else if(c == ')') {
                output += operatorStack.pop();

                continue;
            }

            else {
                    output += String.valueOf(c);
                continue;
            }
        }
        return output;
    }
    public static void main (String [] args)throws java.lang.Exception {

        String inputString = "";
        int n1;
        Scanner in = new Scanner(System.in);
        try
        {
            n1 = in.nextInt();
            StringBuilder[] sb = new StringBuilder[n1];
            for(int i = 0; i < n1; i++) {

                sb[i] = new StringBuilder();



                inputString = in.next();

                sb[i].append(postfixString(inputString)); 

            }


            for(int i = 0; i < n1; i++) {
                System.out.println(String.valueOf(sb[i]));
            }
        }
        catch (Exception e) {
           // System.out.println("");
           System.out.println(e.getMessage());    
            // numberOfTestCases.next();
        }
        System.exit(0);
    }

}

如果我使用nextLine()而不是next(),那么SPOJ引擎会生成一个‘错误的答案’响应。

此外,在postfixString函数中使用StringBuilder对象而不是String对象似乎也有一些问题(我之前使用的是StringBuilder对象;使用'to String()'方法返回字符串)。

请忽略逻辑上的不一致(我知道有几个)。我已经把(大部分)烫好了。让我抓狂的是nextline()next()以及StringBuilder和String问题。

共有1个答案

邵弘伟
2023-03-14

next()将只返回空格前面的内容。nextline()返回当前行并将扫描仪下移到下一行。

 类似资料:
  • 问题内容: 我试图了解这三种方法是如何工作的。这是我对它们的理解: 读取当前行的其余部分,即使它为空。 读取一个整数,但不读取转义序列“ \ n”。 读取当前行,但不读取“ \ n”。 假设我有以下代码: 如果我的输入是: 然后,我在屏幕上得到以下输出: 为什么会有“ HI”的值? 这是否意味着即使没有读取第一行的转义字符,该方法也会读取下一行? 问题答案: nextLine()读取当前行的其余部

  • 问题内容: 在Java中,出现此异常: 从此Java代码: 抛出异常 System.out.println(file.next()。charAt(counter)); 异常是什么意思? 问题答案: 您在循环的每次迭代中都调用两次,因此,当您快要结束时,您会跳出列表的末尾,编译器会告诉您那里什么也没有。 代替这个: 改为这样做: 看这里

  • 我试图了解这三种方法是如何工作的。我是这样理解他们的: 读取当前行的剩余部分,即使该行为空 假设我有以下代码: 如果我的输入是: 然后我在屏幕上得到以下输出: 为什么的值为“HI”? 这是否意味着方法读取下一行,即使第一行的转义字符尚未被读取?

  • 我认为这是一个非常简单的问题,但在过去的几个月里,我遇到了很多次。我在一个方法中创建一个扫描器,然后尝试关闭它,它总是给我一个错误。这一次的错误是: 错误:无法从静态上下文扫描程序引用非静态方法close()。close();

  • 已经为此纠结了一天,来来回回看论坛,没有结果。任何人都可以告诉我为什么函数aMenu()的第二次调用返回一个零,而不等待新的用户输入?我尝试了各种方法,如hasNextInt()、nextLine(),但都不起作用。hasNextInt()不应该在用户写东西之前阻止吗?我该怎么解决这个?多谢了。

  • 我使用jSerialComm库和扫描仪类。当我尝试运行我的程序时,我得到以下错误: 线程“main”中出现异常Java . lang . nullpointerexception < br >位于java.io.Reader .(未知源)< br >位于java.io.InputStreamReader .(未知源)< br >位于java.util.Scanner .(未知源)< br >位于s