【发布时间】:2020-03-13 10:05:02
【问题描述】:
我的代码比较简单。我必须创建一个程序来输入字符串,并跟踪每个字符串的频率。以及用户应该能够输入一行,单击回车并能够输入下一行等,直到用户连续两次单击回车。到目前为止,这是我的代码:
package javaapplication8;
import java.util.Scanner;
public class JavaApplication8 {
static Scanner sc = new Scanner (System.in);
public static void main(String[] args) {
System.out.print("Enter a sentence: ");
String input = sc.nextLine() ;
while (input!=null) {
if (input.isEmpty()){
System.out.println("Read Enter Key.");
break;
} else if (sc.hasNextLine()){
input = sc.nextLine();
} else {
input = null;
}
}
String sentence = input.replaceAll("\\W", "");
sentence = sentence.toUpperCase();
int [] frequencies = new int [26];
int value = 65;
double valuecount = 0;
for (int i = 0; i < 26 ; i++) {
for (int i2 = 0; i2 < sentence.length(); i2++){
if (sentence.charAt(i2) == value){
valuecount += 1 ;
}
}
double percent = (valuecount / sentence.length() ) * 100;
char val = (char) value;
System.out.format (val + " occured %.2f percent of the time. \n", + percent);
value += 1;
valuecount =0 ;
}
}
}
Netbeans 没有给我任何语法错误,这意味着没有任何异常堆栈跟踪。我猜问题出在我的 while 循环中的 replaceAll 行和 null 语句之间(这允许用户在程序运行之前单击两次 enter 键。
我是 Java 新手,对于任何“新手错误”,我深表歉意
谢谢!
编辑:抱歉,我认为异常堆栈跟踪是您在运行程序时出现语法错误(缺少分号等)时得到的红色文本
我的意思是我的程序运行了,但它给了我 NaN 而不是百分比量,但是当我删除整个 while 循环时,程序在没有下一行功能的情况下完美运行。
【问题讨论】:
-
“Netbeans 没有给我任何语法错误,这意味着没有任何异常堆栈跟踪”这是完全错误的。事实上,如果您确实有语法错误,就不可能获得异常堆栈跟踪,因为语法错误会阻止您启动程序,并且无法从从未开始运行的程序中抛出异常。
-
您的
while循环试图实现什么?在它开始之前,您似乎已经掌握了这个句子。 -
String sentence = input.replaceAll("\\W", "");这可能会导致 NPE 问题 -
是的,可以保证,因为我们只能在
input是null时到达那条线。 -
您的意思是改写
while (input == null)吗? (当然还要更改代码的其他部分...)看来您的目标是获得有效的输入,而您使用null表示“无效”,因此无效意味着继续等待=> null意思是一直循环?
标签: java