线程" main"中的例外情况java.lang.Error:String []未初始化

时间:2015-12-14 09:19:09

标签: java arrays string

我想编写一个程序,因为它从用户那里获取输入字符串(例如bhas1234@gmail.com)并打印为bhas1234(在@之后留下字符)当我写下面的代码时它显示以下错误:

import java.util.*;

import java.util.Scanner;

public class Name {

    public static void main(String[] args) {

                Scanner take =new Scanner(System.in);
                int j=0;
                String[] sh;
                String gmail;
                for(j=0;sh[j]!="exit";j++)
                {
                sh[j]= take.nextLine();
                int i=sh[j].indexOf('@');
                gmail= sh[j].substring(0,i);
                System.out.println(gmail);
                }

        }

    }

它将错误显示为

  

线程中的异常" main" java.lang.Error:未解决的编译问题:       局部变量sh可能尚未初始化

3 个答案:

答案 0 :(得分:2)

您必须初始化String数组。

String[] sh = new String[numbefOfIndexes];

在Java中,在初始化之前无法使用数组。

请记住,即使你像我一样初始化它,默认值也是null,因为它是一个对象数组,为了避免这种情况,你可以直接填充数组,如下所示

String[] sh = {"valueOne", "valueTwo"};

答案 1 :(得分:2)

基本上你想要

  • 做无限循环(while)
  • 读入一行输入
    • 如果等于"退出",退出
    • 否则要么分开在" @"并打印第一部分或
    • 找到" @" char的索引并打印一个子字符串(你做了什么)。这两种方法的效果是一样的。这只是一件好事。

答案 2 :(得分:1)

在初始化之前使用sh [j]的for循环中出现错误。

您应该更改代码以从用户获取输入并仅检查字符串而不是字符串数组。我只根据你的代码给出解决方案。将您的代码更新为:

            Scanner take =new Scanner(System.in);
            int j=0;
            String sh;
            String gmail;
            while(!(sh = take.nextLine()).equals("exit"))
            {

               int i=sh.indexOf('@');
               gmail= sh.substring(0,i);
               System.out.println(gmail);
           }