gpt4 book ai didi

java - 线程 "main"java.lang.NullPointerException-part2 除外

转载 作者:行者123 更新时间:2023-12-02 00:23:13 24 4
gpt4 key购买 nike

我按照 Dan 的建议更改了代码我现在可以编译该程序,但是,无论输入是什么,结果始终是 2。我将此程序的第二部分放在新代码下方。请帮忙。

这是新代码。

    public class VowelCons 
{
private final String str;
private final int totalConsonants;
private final int totalVowels;

public VowelCons(final String s)
{
this.str = s;
int totalConsonants = 0;
int totalVowels = 0;
if (null != s)
{
for (final char c : s.toCharArray())
{
switch (c)
{
case 'A':
case 'a':
case 'E':
case 'e':
case 'I':
case 'i':
case 'O':
case 'o':
case 'U':
case 'u':

totalVowels++;
break;

default:

if (Character.isLetter(c))
{
totalConsonants++;
}
break;
}
}
}
this.totalConsonants = totalConsonants;
this.totalVowels = totalVowels;
}


public String getString()
{
return str;
}

public int getNumConsonants()
{
return this.totalConsonants;
}

public int getNumVowels()
{
return this.totalConsonants;
}
}

该程序的另一部分获取用户的输入并将其传递给此类。这是代码。 [根据规定此部分不能更改]

    import java.util.Scanner;

public class VowelConsCounter
{
public static void main(String[] args)
{
String input; // User input
char selection; // Menu selection

Scanner keyboard = new Scanner(System.in);

System.out.print("Enter a string: ");
input = keyboard.nextLine();

VowelCons vc = new VowelCons(input);

do
{
selection = getMenuSelection();

switch(Character.toLowerCase(selection))
{
case 'a' : System.out.println("\nNumber of vowels: " +
vc.getNumVowels());
break;
case 'b' : System.out.println("\nNumber of consonants: " +
vc.getNumConsonants());
break;
case 'c' : System.out.println("\nNumber of vowels: " +
vc.getNumVowels());
System.out.println("Number of consonants: " +
vc.getNumConsonants());
break;
case 'd' : System.out.print("Enter a string: ");
input = keyboard.nextLine();
vc = new VowelCons(input);
}

} while (Character.toLowerCase(selection) != 'e');

}

public static char getMenuSelection()
{
String input;
char selection;

Scanner keyboard = new Scanner(System.in);

System.out.println("a) Count the number of vowels in the string.");
System.out.println("b) Count the number of consonants in the string.");
System.out.println("c) Count both the vowels and consonants in the string.");
System.out.println("d) Enter another string.");
System.out.println("e) Exit the program.");

input = keyboard.nextLine();
selection = input.charAt(0);

while (Character.toLowerCase(selection) < 'a' || Character.toLowerCase(selection) > 'e')
{
System.out.print("Only enter a, b, c, d, or e: ");
input = keyboard.nextLine();
selection = input.charAt(0);
}

return selection;
}
}

最佳答案

看起来您正在初始化本地数组 result,但随后尝试从成员数组 result 中读取。由于您尚未初始化成员一,它仍然是 null,因此您会看到 java.lang.NullPointerException

您可能希望将 countVowelsAndCons 更改为 void 返回类型,并删除本地结果。然后,您需要确保在尝试调用 getNumVowelsgetNumConsonants 之前调用它。顺便说一句,像 index 这样的东西应该是成员函数中的局部变量 - 它们不属于类范围。

但更重要的是,这可能根本不应该是一个类。您可能想要类似的东西:

private static boolean isVowel(char c)
{
return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}

public static int countConsonants(String s)
{
int count = 0;
for(int i=0, len=s.length(); i<len; ++i)
{
if(!isVowel(s.charAt(i))) ++count;
}
return count;
}

public static int countVowels(String s)
{
int count = 0;
for(int i=0, len=s.length(); i<len; ++i)
{
if(isVowel(s.charAt(i))) ++count;
}
return count;
}

关于java - 线程 "main"java.lang.NullPointerException-part2 除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10565155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com