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

在输入多行输入时,只考虑最后一行

易英奕
2023-03-14
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;


public class BeautifulStrings2 {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        //File f=new File("input.txt");
        Scanner in=new Scanner(System.in);
        BufferedReader in1=new BufferedReader(new InputStreamReader(System.in));
        int n=in.nextInt();
        for (int i=1;i<=n;i++){
            String s=in1.readLine();
            System.out.println(s);
            String chars="";
            if (Character.isUpperCase(s.charAt(0))){
                chars+=s.charAt(0);
            }
            else {
                chars+=Character.toUpperCase(s.charAt(0));
            }
            for (int j=0;j<s.length();j++){
                boolean flag=true;
                for (int k=0;k<chars.length();k++){
                    if (Character.isLetter(s.charAt(j))){
                        if (chars.charAt(k)==Character.toUpperCase(s.charAt(j))){
                            flag=false;
                            break;
                        }
                    }
                }
                if (flag){
                    chars+=Character.toUpperCase(s.charAt(j));
                }
            }
            String temp=chars;
            chars="";
            for (int j=0;j<temp.length();j++){
                if (temp.charAt(j)>64&&temp.charAt(j)<91)
                    chars+=temp.charAt(j);
            }
            int [] numbers=new int[chars.length()];
            Arrays.fill(numbers, 0);
            for (int j=0;j<chars.length();j++){
                for (int k=0;k<s.length();k++){
                    if (chars.charAt(j)==Character.toUpperCase(s.charAt(k))){
                        numbers[j]++;
                    }
                }
            }
            Arrays.sort(numbers);
            int factor=26,sum=0;
            for (int j=chars.length()-1;j>=0;j--){
                sum+=numbers[j]*factor;
                factor--;
            }
            System.out.println("Case #"+i+": "+sum);
        }
    }

}
5
ABbCcc
Good luck in the Facebook Hacker Cup this year!
Ignore punctuation, please :)
Sometimes test cases are hard to make up.
So I just go consult Professor Dalves
Case #1: 152
Case #2: 754
Case #3: 491
Case #4: 729
Case #5: 646
Case #1: 646
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;


public class BeautifulStrings2 {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        //File f=new File("input.txt");
        Scanner in=new Scanner(System.in);
        //BufferedReader in1=new BufferedReader(new InputStreamReader(System.in));
        int n=in.nextInt();
        in.nextLine();
        for (int i=1;i<=n;i++){
            String s=in.nextLine();
            System.out.println(s);
            String chars="";
            if (Character.isUpperCase(s.charAt(0))){
                chars+=s.charAt(0);
            }
            else {
                chars+=Character.toUpperCase(s.charAt(0));
            }
            for (int j=0;j<s.length();j++){
                boolean flag=true;
                for (int k=0;k<chars.length();k++){
                    if (Character.isLetter(s.charAt(j))){
                        if (chars.charAt(k)==Character.toUpperCase(s.charAt(j))){
                            flag=false;
                            break;
                        }
                    }
                }
                if (flag){
                    chars+=Character.toUpperCase(s.charAt(j));
                }
            }
            String temp=chars;
            chars="";
            for (int j=0;j<temp.length();j++){
                if (temp.charAt(j)>64&&temp.charAt(j)<91)
                    chars+=temp.charAt(j);
            }
            int [] numbers=new int[chars.length()];
            Arrays.fill(numbers, 0);
            for (int j=0;j<chars.length();j++){
                for (int k=0;k<s.length();k++){
                    if (chars.charAt(j)==Character.toUpperCase(s.charAt(k))){
                        numbers[j]++;
                    }
                }
            }
            System.out.println(chars);
            Arrays.sort(numbers);
            int factor=26,sum=0;
            for (int j=chars.length()-1;j>=0;j--){
                sum+=numbers[j]*factor;
                factor--;
            }
            System.out.println("Case #"+i+": "+sum);
        }
    }

}
Case #1: 152
Case #2: 754
Case #3: 491
Case #4: 729
Case #5: 646

我怎样才能使它出现而不必按回车键?!

共有1个答案

诸正谊
2023-03-14

您在两个不同的流读取器中使用了两次标准输入流System.in,一个是扫描器,另一个是BufferedReader:

Scanner in=new Scanner(System.in);
BufferedReader in1=new BufferedReader(new InputStreamReader(System.in));

这看起来是一件非常危险的事情,而且容易出错。为什么不简单地使用扫描器(或BufferedReader)来处理所有的事情呢?

如果您确实对所有用户使用扫描器,那么是的,如果下一个令牌位于下一行,则在nextLine()之后使用nextInt()。如果使用扫描器,您甚至不需要文件顶部的5号,因为在扫描器的hasnextline()返回false之前,您将读取行。

 类似资料:
  • 问题内容: 我有以下形式的文本输入: 我试图让它接受多行输入。宽度和高度会使框变大,但用户可以输入所有想要的文本,但它只能填充一行。 如何使输入更像文本区域? 问题答案: 您需要使用文本区域进行多行处理。

  • 我目前正在用Java编写一个程序,其中我需要从用户那里获得输入,这是一段文本。然而,我需要用户能够在一次输入文本的多个段落。当程序提示输入时,只需粘贴整段文本就可以实现这一点。我对输入使用扫描器,当我将多个段落粘贴到输入中时,无论何时打印存储文本的变量,都不会抛出错误,只输出第一节(在第一个换行符之前)。如何使用多个换行符存储整段文本,而不提示用户为每个文本块输入单独的输入? 我已经有了一些代码,

  • 问题内容: 我有以下代码: 控制台输出看起来像 我想在用户按下后删除文本。退格键无法做到。 问题答案: 这将在大多数unix和Windows终端中正常工作…它使用非常简单的ANSI转义。 请注意,在Windows上,您可能需要使用以下http://www.windowsnetworking.com/kbase/windowstips/windows2000/usertips/miscellaneo

  • 我有一个fileWrite()方法,它接受两个字符串值作为参数(特定的数组值)。我将此方法包含在for循环中,这样它就可以循环遍历数组并获得要写入文件的字符串值 我在代码中包含的方法如下所示: 似乎只是将数组中的最后一个值写入文本文件。

  • 条款29:需要一个一个字符输入时考虑使用istreambuf_iterator 假设我们要把一个文本文件拷贝到一个字符串对象中。似乎可以用一种很有道理的方法完成: ifstream inputFile("interestingData.txt"); string fileData((istream_iterator<char>(inputFile)), // 把inputFile读入 i

  • 问题内容: 我想知道如何编写一个可以接受多行输入的简单程序,然后可以像在lynx浏览器中一样提交输入,在该浏览器中您可以使用空白行然后使用句点来提交输入。 我想在电子邮件程序中使用它。 问题答案: 这是一个简单的方法: