Java 初始化问题?
我试图制作一个程序,让用户输入一个未知的名称值,然后输出输入的最长名称。这是到目前为止我的代码。当我编译时,我有几个错误,它们都是相同的“找不到符号”。我需要初始化这些变量吗?如果需要,在哪里Java 初始化问题?,java,Java,我试图制作一个程序,让用户输入一个未知的名称值,然后输出输入的最长名称。这是到目前为止我的代码。当我编译时,我有几个错误,它们都是相同的“找不到符号”。我需要初始化这些变量吗?如果需要,在哪里 import java.util.Scanner; public class Name { public static void main(String[] args) { Scanner kb = new Scanner(System.in);
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);
}
}
您将
扫描仪
传递给longestName
,但在longestName
中,您将参数命名为sc
。在longestName
中使用sc
而不是kb
使用小写的while
代替while
;删除后面的分号,同时
;那里的分号表示这是正文,而不是它下面的{
}
块
我假设在while循环的底部,您希望将下一个整数赋给number
,而不是立即超出范围的新变量number1
您没有声明什么是biggestName
(或name
)。此处有两个错误:
While (number !=-1);
While
应该是While
,而代码>生成一个无限循环
另一个问题是,您无论如何都不会更改循环中的编号。1-
public static void longestName(Scanner sc)
将扫描仪名称更改为kb
,或将方法中的每个kb
更改为sc
2-见
3-使用while
代替while
,并删除代码>您的代码中有很多错误。在不详细解释每个错误的情况下,下面是一个修改版本的示例,该版本可以工作:
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);
}
}
我可以在代码中看到以下问题:
longestName()
方法应使用引用名称sc
而不是kb
(因为kb
仅在main
方法中具有作用域)
未声明变量biggestName
。它应该声明为类变量或longestName()
方法中的变量,并且应该是String
它不是While
,而是While
在小写字母中带有“w”
while语句后面不应该有分号
在while循环结束时,将计算while循环要比较的数字,该数字当前分配给了错误的变量kb.nextInt()
应分配给变量number
而不是number1
,因为变量number1
从未被读取/使用
运算符不能应用于字符串类型。在if(name1.length()>biggestName)
行中,我们将int
与String
进行比较,这将导致编译错误。该行应修改为if(name1.length()>biggestName.length())
如果您提供的输入不是数字,则方法nextInt()
将导致引发inputmaschException
李>
现在我觉得我应该像Joe Elleson那样编写一个正确的代码。但希望这个答案能有所帮助 他至少定义了name(String name=kb.nextLine()
)