初始化问题?

时间:2013-03-27 20:14:33

标签: java

我正在尝试创建一个程序,让用户输入未知的名称值,然后输出输入的最长名称。到目前为止这是我的代码。当我编译我有几个错误,他们都是相同的“找不到符号”。我是否需要初始化这些变量呢?

import java.util.Scanner; 
public class Name 
{ 
    public static void main(String[] args) 
    { 
        Scanner kb = new Scanner(System.in); 
        longestName(kb); 
    } 
    public static void longestName(Scanner sc) 
    {

        String name=kb.nextLine();
        biggestName=name;
        System.out.println("Type -1 if you want to quit");
        int number=kb.nextInt();
        While (number !=-1); 
        { 
            String name1=kb.nextLine();
            if (name1.length() > biggestName)
            {
                biggestName=name1;
            }
            System.out.println("Do you want to continue? Type -1 to quit.");
            int number1=kb.nextInt();
        }
        System.out.println("Longest name is "+biggestName);

    }
}

感谢帮助人员修复错误,以及其他一些更改和程序提供了正确的输出。

import java.util.Scanner; 
public class Name 
{    
    public static void main(String[] args) 
    { 
        Scanner kb = new Scanner(System.in); 
        longestName(kb); 
    } 
    public static void longestName(Scanner kb) 
    {

        String biggestName;
        System.out.println("Enter the first name");
        String name=kb.nextLine();
        biggestName=name;
        System.out.println("Type -1 if you want to quit");
        int number=kb.nextInt();
        while (number !=-1) 
        { 
            System.out.println("Enter another name");
            Scanner kb1 = new Scanner(System.in);
            String name1=kb1.nextLine();
            int length1=biggestName.length();
            int length2=name1.length();
            if (length2 > length1)
            {
                biggestName=name1;
            }
            System.out.println("Do you want to continue? Type -1 to quit.");
            number=kb.nextInt();
        }
        System.out.println("Longest name is "+biggestName);

    }
}

5 个答案:

答案 0 :(得分:1)

您已将Scanner传递给longestName,但在longestName中,您将参数命名为sc。在sc中使用kb代替longestName

使用小写while代替While;删除while后面的分号;分号表示 是正文,而不是其下面的{ }块。

我假设在while循环的底部,您要将下一个整数分配给number,而不是立即超出范围的新变量number1

您没有声明biggestName是什么(或name)。

答案 1 :(得分:1)

您的代码中存在相当多的错误。在没有详细解释每个错误的情况下,以下是一个有效的修改版本示例:

import java.util.Scanner; 
public class Name 
{ 
    public static void main(String[] args) 
    { 
        Scanner kb = new Scanner(System.in); 
        longestName(kb); 
    } 
    public static void longestName(Scanner sc) 
    {
        System.out.println("Enter name, or type '-1' if you want to quit");

        String name=sc.nextLine();
        String biggestName="";

        while (!name.equals("-1")) 
        { 
            if (name.length() > biggestName.length())
            {
                biggestName=name;
            }
            name=sc.nextLine();
        }
        System.out.println("Longest name is "+biggestName);

    }
}

答案 2 :(得分:0)

这里有两个错误:

While (number !=-1); 

While应为while,而;会产生无限循环。

另一个问题是你不要在循环中改变number

答案 3 :(得分:0)

1-

public static void longestName(Scanner sc)

将扫描仪的名称更改为kb,或将方法中的每个kb更改为sc

2-见Scanner issue when using nextLine after nextXXX

3-使用while代替While,然后移除;

答案 4 :(得分:0)

我可以在代码中看到以下问题:

  1. longestName()方法应该使用引用名称sc而不是kb(因为kb仅在main方法中具有范围)
  2. 未声明变量biggestName。它应该被声明为类变量或longestName()方法中的变量,并且应该是String类型
  3. 不是Whilewhile是'w',小案例
  4. 在while语句
  5. 之后不应该有分号
  6. 在while循环结束时,要计算while循环的比较数,并将其分配给错误的变量。 kb.nextInt()应该分配给变量number而不是number1,因为永远不会读取/使用变量number1
  7. >运算符不能应用于String类型。在if (name1.length() > biggestName)行中,我们将intString进行比较,结果会导致编译错误。该行应修改为if (name1.length() > biggestName.length())
  8. 如果您提供的输入不是数字,方法nextInt()将导致InputMismatchException被抛出。
  9. 现在我觉得我应该写一些像Joe Elleson那样的更正代码。但希望这个答案有所帮助。