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

不能调用"String.length()",因为"s"在for循环[重复]中为null。

胡博艺
2023-03-14

我正在开发一个程序来提供用户输入的一组文本行的信息。我必须做的操作之一是写字符数最多的一行。如果输入是“”(可以小于10),程序最多只能得到10行,接受更少的行

唯一的问题是,如果输入不符合“”的要求,它会给我这个错误,这对我来说很奇怪,因为如果他们输入10行,它就可以正常工作。我想它可能在循环中。任何帮助都将不胜感激!

以下是代码:

public class Exercicio2 {
    public static String lstring(String[] array) {
        int maxLength = 0;
        String longeststring= null;
        for (String s : array) {
            if (s.length() > maxLength) {
                maxLength = s.length();
                longeststring= s;
            }
        }
        return longeststring;
    }

    public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        String[] array = new String[10];
        System.out.println("Insert 10 lines or less");
        for (int i = 0; i < array.length; i++) {
            array[i] = scn.nextLine();
            if (array[i].equals("")) break;
        }

        int choice = 0;


        while (choice != 6)   {


            System.out.println("...................................................");
            System.out.println(".......................MENU........................");
            System.out.println("|                                                 |");
            System.out.println("|1. Linha com mais caracteres                     |");
            System.out.println("|2. Linhas com caracteres inferiores              |");
            System.out.println("|3. Linha com mais vogais                         |");
            System.out.println("|4. Verificar a existencia da linha               |");
            System.out.println("|5. Novo conjunto de linhas                       |");
            System.out.println("|6. Sair                                          |");
            System.out.println("...................................................");
            System.out.print("Opcao: ");

            choice = scn.nextInt();
            System.out.println();
            if (choice > 6 || choice < 0) {
                System.out.println("Escolha invalida.Tente uma opcao entre 1 e 6");
            }

            if (choice == 1) {
;                   String longeststring= lstring(array);
                      System.out.format("longest string: '%s'\n", longeststring);

共有1个答案

公羊招
2023-03-14

核心问题是,您正在迭代一个可能包含空值的数组,而没有考虑到它可能包含空值的事实。此外,您正在使用一个空字符串作为用户不再输入的标志值,但您正在数组中捕获该空字符串。

你有一些方法可以解决这个问题。这里有一些方法...

  1. 适应数组中出现空值的可能性

第一种策略可能会有问题,因为每次访问数组时都必须记住为null。第二种方法是在一个结构中捕获输入,然后根据需要构建可能更小的阵列。第三种方法利用了列表的可变大小,可能是最好的选择。

private static List<String> getUserInput(Scanner scn) {
  int MAX_LINES = 10;
  System.out.printf("Insert %d lines or less (empty line to stop)", MAX_LINES).println();
  List<String> inputs = new ArrayList<>();
  for (int i = 0; i < MAX_LINES; i++) {
    String line = scn.nextLine().trim(); // treat a bunch of spaces/tabs as empty line
    if ("".equals(line)) {
      break;
    }
    inputs.add(line);
  }
  return inputs;
}

在你的主要你会做这样的事情...

public static void main(String[] args) {
  Scanner scn = new Scanner(System.in);
  // replace `array` with `inputs`
  List<String> inputs = getUserInputs(scn);
  ... do stuff ...
}

查找最长字符串的方法必须更改以接受List而不是数组,但是,迭代语法是相同的,因此不需要更改(除了更改变量,假设它被重命名)。

public static String lstring(List<String> list) {
  ...
}
 类似资料:
  • 在我的程序中,我发现当为时,循环无法正确退出。它看起来像整数溢出,远远大于10,循环不会停止。请告诉我发生了什么,以及如何在大型项目中避免这个错误。 代码链接

  • 我有一个命令,当被调用时,将从mongob集合中获取用户标识列表,从不同的mongob集合中获取角色名称列表,然后通过这些列表查看哪些角色需要分配给哪些标识。 我可以让它打印出需要角色的正确ID,但我无法通过实际分配角色的最后一步。 我得到的错误是:文件“D:\WORK\DISCORD BOT\tanquity\cogs\roles.py”,第339行,在assignRolesByExp等待用户。

  • 这是我的代码: 我的问题是如何检查分数是否在范围内,如果输入了错误的输入,如何使循环重复。当我试图运行程序并输入一个超过范围的输入时,它会转到下一个评估数字,而不是再次尝试,直到它是真的。

  • 在上面的代码中,我根据天气与否计算每个指数,每个指数都是=到零。然而,它总是在foreach循环中运行false,在for循环中运行true。有人能解释一下幕后发生了什么让这一切发生吗? 我不是按顺序运行它们,它们都是为了演示目的。

  • 我正在编写一个脚本,将文本文件读入一个数据框,该数据框可以包含各种列和行。然后,对数据进行一些操作,需要将所有数据汇总到一个数据框中,以输出到excel文档。 我的代码适用于单个文件,但现在我需要遍历所有文件。 这似乎应该很容易做到,但我已经尝试了我能找到的所有功能来实现这一点,但没有任何效果。 以下是基本结构: 输入/期望输出示例: 我尝试了追加、添加、合并、连接、合并,但没有一个有效。我只是使

  • 在我的程序中,我发现当为时,循环无法正确退出。它看起来像整数溢出,远远大于10,循环不会停止。请告诉我发生了什么,以及如何在大型项目中避免这个错误。 代码链接