在Java中存储和访问字符串(通过使用数组)

时间:2011-11-21 19:42:51

标签: java arrays string user-input

我试图将多个字符串(歌曲名称)输入到数组中。然后,程序将要求用户为其中一首歌曲命名并告诉用户该歌曲在该阵列中的位置。

编辑:

感谢帮助人员。我已将两个循环设置为0并且我仍然遇到问题。 我对该计划有各种各样的问题。我收到ArrayIndexOutOfBoundsExceptionNullPointerExeption的运行时错误。

我应该怎样做才能使它发挥作用?。

提前感谢所有人。

代码:

import javax.swing.*; // import the swing library for I/O

class favsongs
{

   public static void main (String[] param)
{
      music();
      System.exit(0);

} // END main


/* ***************************************************
   Set up an array containing songs then find one asked for by the user
*/

public static void music()
{

   // Declare variables
   //
String key =""; //the thing looked for
int result = -1;// the position where the answer is found
String[] songs = new String[5];





// Ask for songs
for (p=0; p<=4; p++)
{   

         songs[p]=JOptionPane.showInputDialog("Song "+ p + "?");
    }

// Ask user for a song
key = JOptionPane.showInputDialog("Name a song and i'll tell you what position you placed it in.");

    for (int i=0; i<songs.length; i++)
    {

       if (songs[i].equals(key))
       {
          result = i;   
       }
       else // Error message
       {
       JOptionPane.showMessageDialog(null,"Error!!");
       break;
       }
    }
    // Tells user the name of the song and what position in the array it is in
   JOptionPane.showMessageDialog(null,"You placed " + key + " in position " + " " + result);

} // END music

 } // END class favsongs

4 个答案:

答案 0 :(得分:3)

看看这个循环:

for (p=1; p<=4; p++)

请注意,它从1开始。因此songs[0]的默认值仍为null。现在看看你如何使用数组:

for (int i=0; i<songs.length; i++)
{
   if (songs[p].equals(key))

当我认为你的意思是p时,你不仅在这里试图使用i,而且 方式也会失败。使用p将访问超出范围的songs[5],并使用iequals上的songs[0]调用为空。

希望这足以让你前进。其他几点:

  • 你的“对不起,什么?”提示在循环内。你的意思是吗?
  • 您应该查看Java命名约定,既可以用于大小写,也可以为您的方法提供更有意义的名称
  • 您应该尝试在尽可能紧的范围内声明变量。如果您已将p声明为for循环的一部分,那么您就不会能够错误地使用{{1}}。

答案 1 :(得分:0)

// Ask for songs
for (p=1; p<=4; p++)
{      

     songs[p]=JOptionPane.showInputDialog("Song "+ p + "?");
}

这将使歌曲[0]未初始化。当您稍后尝试使用它时,您将获得NullPointerException。

答案 2 :(得分:0)

首先,将歌曲放入的循环从1开始,尝试设置p = 0,数组从零到长度-1。试试这个,看看它是否解决了问题

答案 3 :(得分:0)

你的问题似乎在这里:

for (p=1; p<=4; p++)
{  
    songs[p]=JOptionPane.showInputDialog("Song "+ p + "?");
}

在Java中,数组位置从0开始,以[arrayLength] - 1结束。

这样做可以解决您的问题:

for (p=0; p < song.length(); p++)
{  
    songs[p]=JOptionPane.showInputDialog("Song "+ p + "?");
}
Oracle的

This教程应该可以帮助您入门。您可能还想查看ArrayList类,这样您就可以动态地将项目添加到列表中,如this简单教程中所示。