Java Error - 需要数组,但找到了java.lang.String

时间:2015-10-28 06:44:38

标签: java arrays compiler-errors

我已经在这个问题上工作了一段时间,并设法摆脱了这个程序的几乎所有错误。每次我编译时,我似乎得到这个错误说#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.
    }
  }
}

3 个答案:

答案 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,以便更容易修改。如果alphabetStringBuilder,那么相关行的第一个替代品(插入&#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);

如果我是你,我会使用第二种方法。