我正在开发一个程序来提供用户输入的一组文本行的信息。我必须做的操作之一是写字符数最多的一行。如果输入是“”(可以小于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);
核心问题是,您正在迭代一个可能包含空值的数组,而没有考虑到它可能包含空值的事实。此外,您正在使用一个空字符串作为用户不再输入的标志值,但您正在数组中捕获该空字符串。
你有一些方法可以解决这个问题。这里有一些方法...
第一种策略可能会有问题,因为每次访问数组时都必须记住为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,循环不会停止。请告诉我发生了什么,以及如何在大型项目中避免这个错误。 代码链接