gpt4 book ai didi

java - 字符串中字符出现百分比的计算不正确(java)

转载 作者:行者123 更新时间:2023-12-01 09:31:14 26 4
gpt4 key购买 nike

我的代码采用一个字符串,计算字母表中每个字符在字符串中出现的次数,然后显示数组的直方图,其中包含该字符在字符串中出现的次数的百分比信息。

我的代码存在问题,无法显示字符串中出现的每个字符的正确百分比,偏差了几个百分点。

例如,如果我输入“hello world”,L 应该占字符串的 30%,对吧?但我的代码显示它占字符串的 27%。不太确定是代码问题还是计算问题

 public class LetterCounter {
private static int[] alphabetArray;
private static char ch;
double stringLength;



/**
* Creates an array to hold the total number of occurences for each character of the alphabet
*/
public LetterCounter()
{
alphabetArray = new int[26];
}

/**
* The method will go through the user inputted string, incrementing characters one by one
* when it comes across them in the string.
* @param input: the string that the user wants
*/
public void countLetters(String input) {
String userInput= input;
String s2 = userInput.toLowerCase();
for ( int i = 0; i < s2.length(); i++ ) {
char ch= s2.charAt(i);
if (ch >= 97 && ch <= 122){
alphabetArray[ch-'a']++;
}
}
stringLength = s2.length();
}

/**
* Calculates how many characters there are in the inputted string. Multiple strings that are input by the user will be
* added to the total character count.
* @return: the sum of how many characters there are in each string
*/
public int getTotalCount() {
int sum=0;
for (int i = 0; i < alphabetArray.length; i++) {
if(alphabetArray[i]>=0){
sum = 0;
char ch = (char) (i+97);
for(int total : alphabetArray) {
sum += total;
}
}

}
return sum;
}

/**
* This method will reset the character count to zero for every character.
*/
public void reset() {
for (int i : alphabetArray) {
if(alphabetArray[i]>=0){
alphabetArray[i]=0;
char ch = (char) (i+97);
System.out.println(ch +" : "+alphabetArray[i]);
}
}
}

/**
* The method prints out a histogram of the entire array, displaying the most commonly occuring letter as having 60 #s,
* with the rest of the letter's #s to the 60 #s. The percentage occurence of each character in the string is also displayed beside the character.
* @return: the histogram of the array
*/
public String toString() {
int max = alphabetArray[0];
int markCounter = 0;
double percent = 0.0;
String s = "";

for(int i =0; i<alphabetArray.length; i++) {
//finds the largest number of occurences for any letter in the string
if(alphabetArray[i] > max) {
max = alphabetArray[i];
}
}

for (int i = 0; i < alphabetArray.length; i++) {
//percent = (alphabetArray[i] /stringLength) * 100;
percent = Math.round((alphabetArray[i] /stringLength ) * 100);
markCounter = (alphabetArray[i] * 60) / max;
if(alphabetArray[i]>=0){
char ch = (char) (i+97);
System.out.print(ch +" : ");
}

for (int hash =0; hash <markCounter; hash++) {
System.out.print("#");

}

if(alphabetArray[i] >= 0){
System.out.print(" " + percent + "%"); //+ percent);

}
System.out.println();

}

return s;
}
}

最佳答案

您正在使用 string.length() 函数来计算字符串的长度。该函数也计算字符串长度中的空格。我猜您正在尝试计算字符串中可用字符总数的百分比。

您需要计算循环中的字符串长度,在循环中您要检查每个字符的频率。

public void countLetters(String input) {
String userInput= input;
String s2 = userInput.toLowerCase();
for ( int i = 0; i < s2.length(); i++ ) {
char ch= s2.charAt(i);
if (ch >= 97 && ch <= 122){
alphabetArray[ch-'a']++;
stringLength++;
}
}

}

这样你就可以得到字符串中的字符总数。

此外,您可能还想确定是否要包含字母以外的字符。特殊字符也可以是字符串的一部分。根据您的要求,字符串长度计数器将更新。

关于java - 字符串中字符出现百分比的计算不正确(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39383798/

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