我已经在这个问题上工作了一段时间,并设法摆脱了这个程序的几乎所有错误。每次我编译时,我似乎得到这个错误说#34;数组必需,但找到了java.lang.String。"我真的很困惑这意味着什么。有谁可以帮助我吗?我经常苦苦挣扎。
import java.util.Scanner;
public class Period
{
private static String phrase;
private static String alphabet;
public static void main(String [] args)
{
Scanner keyboard = new Scanner(System.in);
String userInput;
int[] letter = new int [27];
int number = keyboard.nextInt();
System.out.println("Enter a sentence with a period at the end.");
userInput = keyboard.nextLine();
userInput.toLowerCase();
}
public void Sorter(String newPhrase)
{
phrase=newPhrase.substring(0,newPhrase.indexOf("."));
}
private int charToInt(char currentLetter)
{
int converted=(int)currentLetter-(int)'a';
return converted;
}
private void writeToArray()
{
char next;
for (int i=0;i<phrase.length();i++)
{
next=(char)phrase.charAt(i);
sort(next);
}
}
private String cutPhrase()
{
phrase=phrase.substring(0,phrase.indexOf("."));
return phrase;
}
private void sort(char toArray)
{
int placement=charToInt(toArray);
if (placement<0)
{
alphabet[26]=1; // This is here the error occurs.
}
else
{
alphabet[placement] = alphabet[placement] + 1; // This is where the error occurs.
}
}
public void entryPoint()
{
writeToArray();
displaySorted();
}
private void displaySorted()
{
for (int q=0; q<26;q++)
{
System.out.println("Number of " + (char)('a'+q) +"'s: "+alphabet[q]); //this is where the error occurs.
}
}
}
答案 0 :(得分:1)
替换
private static String alphabet;
与
private static char[] alphabet = new char [27];//to keep it in sync with letter
它应该有用。
答案 1 :(得分:1)
您不能将String
用作数组。这里有两个选项来解决这个问题:
1)使alphabet
char[]
代替String
。
2)不要像对待数组一样对待alphabet
。使用alphabet.charAt(placement)
而不是尝试引用字符,就好像它存储在数组中一样。但是,您无法使用charAt()
将一个字符替换为另一个字符,而不是:
alphabet[placement] = alphabet[placement] + 1;
使用它:
alphabet = alphabet.substring(0, placement+1) + "1" + alphabet.substring(placement+1);
假设您要插入&#34; 1&#34;在alphabet
中指定的字符之后(我并不完全清楚你在这里想要实现的目标)。如果你的意思是让那行代码替换你所称的alphabet[placement]
字符和后面的那个字符,你可能会想要这样做:
alphabet = alphabet.substring(0, placement+1) + alphabet.charAt(placement+1) + alphabet.substring(placement+1);
或者,您可以将alphabet
设置为StringBuilder
而不是String
,以便更容易修改。如果alphabet
是StringBuilder
,那么相关行的第一个替代品(插入&#34; 1&#34;)可以这样写:
alphabet = alphabet.insert(placement, 1);
第二种选择(更改alphabet.charAt(placement)
以匹配以下字符可以这样写:
alphabet.setCharAt(placement, alphabet.charAt(placement+1));
答案 2 :(得分:0)
嗯,问题是你不能像java那样威胁String中的String(例如,alphabet [i])。
String在Java中是不可变的。你无法改变它们。
您需要创建一个替换字符的新字符串。
String myName = "domanokz";
String newName = myName.substring(0,4)+'x'+myName.substring(5);
或者您可以使用StringBuilder:
StringBuilder myName = new StringBuilder("domanokz");
myName.setCharAt(4, 'x');
System.out.println(myName);
如果我是你,我会使用第二种方法。