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

为什么我的代码不能按预期工作?我认为空指针异常存在问题。(Java)[重复]

穆高澹
2023-03-14

我的代码相对简单。我必须创建一个程序,接收字符串的输入,并跟踪每个字符串的频率。以及用户应该能够键入一行,单击enter并能够输入下一行等,直到用户连续单击enter两次。以下是我目前的代码:

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 ;
    }
}
}

Netbean没有给我任何语法错误,这意味着没有任何异常堆栈跟踪。我猜问题是在replace eAll行和我的while循环中的null语句之间(这允许用户在程序运行之前单击两次回车键。

我对Java非常陌生,所以很抱歉出现了“新手错误”

谢啦!

编辑:很抱歉,我以为异常堆栈跟踪是您在运行带有语法错误的程序时得到的红色文本(缺少分号等)

我的意思是,我的程序运行,但它给我的是NaN而不是百分比,但当我删除整个while循环时,程序在没有下一行功能的情况下运行得很好。

共有1个答案

袁耀
2023-03-14

问题似乎是您的读取输入循环。在您将字符串设置为null之前,您的while循环不会退出,这仅在将输入管道传输到标准输入时发生。我相信如果您只想在字符串既不为空也不为空时继续,一个示例解决方案是:

while(true){
    if(input != null){
        if(!input.isEmpty()){
            break;
        }
    }
    input = sc.nextLine();
}

编辑:道歉并没有完全理解你想要达到的目标,而是假设的。

将上面的片段替换为:

StringBuilder inputBuilder = new StringBuilder();
String nextInput = sc.nextLine();
while(true){
    if(nextInput != null){
        if(nextInput.isEmpty()){
            break;
        }
        inputBuilder.append(nextInput);
    }
    nextInput = sc.nextLine();
}
String input = inputBuilder.toString();

应该得到你想要的行为

 类似资料:
  • 在以下代码中,我得到了一个Java·朗空指针异常: 它发生在最后一个if语句中。我使用了日志文件:fragen.size()是30,它在I=1时崩溃 这对我来说毫无意义 请帮助;)

  • 我在代码中打开ListActivity时得到空指针异常,但所有跟踪都不是我的代码。

  • 下面是一个链表的简单实现。我刚刚添加了相关代码。首先,我向列表中添加一些值,10,990和10000。当我搜索相同的值时,对于key=10,我得到true,但是对于key=990和key=10000得到false,尽管它应该是true。另外,如果我将第二个值从990更改为99,并搜索key=99,这一次我得到的是true。 我不确定是否使用泛型类型。我想我在那里做错了什么。因为如果我用int替换泛

  • 在主线程中初始化: 然后在奴隶身上,当它等待主人的时候,我会这样做: 奴隶必须在这里等待: 奴隶: 主人: 下面是我所看到的输出: -gt-

  • 问题内容: 我正在使用Java和Selenium编写测试。我需要将另一个元素内的最后一个元素,所以我使用函数,但问题是,当我申请时,它并不总是带给我最后一个: 至 得到,它带给我: 但是当我将其应用于: 它带给我: 问题答案: 这是XPath混乱的常见原因。 首先是简单的部分: 选择文档中的所有元素。 选择文档中属于元素后代的所有元素。 到目前为止,正常的东西。 接下来是棘手的部分: 要在 兄弟姐

  • ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。 为什么会这样?因为我指定了在不满足任何条件的情况下分配给列的值。