编写一个程序,要求用户输入字符串。然后要求用户输入索引值(整数)。您将使用字符串类中的charAt()方法来查找并输出该索引所引用的字符。允许用户通过将其置于循环中来重复这些操作,直到用户为您提供一个空字符串。现在意识到,如果我们用错误的值(负值或大于字符串大小的整数)调用charAt方法,将引发异常。添加代码以捕获此异常,输出警告消息,然后继续循环
import java.util.Scanner;
class Main
{
public static void main(String[] args)
{
System.out.println("");
String s;
int ind;
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
s=sc.next();
if(s.length()==0)
break;
ind=sc.nextInt();
try {
char ch=s.charAt(ind);
System.out.println("Character is "+ch);
}
catch(Exception e) {
System.out.println("Bad index Error!");
}
}
}
}
答案 0 :(得分:3)
是的。您可以依靠赋值评估分配的值。另外,在致电Scanner.hasNextInt()
之前先致电Scanner.nextInt()
。喜欢,
System.out.println();
String s;
Scanner sc = new Scanner(System.in);
while (sc.hasNext() && !(s = sc.next()).isEmpty()) {
if (sc.hasNextInt()) {
int ind = sc.nextInt();
try {
char ch = s.charAt(ind);
System.out.println("Character is " + ch);
} catch (Exception e) {
System.out.println("Bad index Error!");
}
}
}
答案 1 :(得分:3)
有一个错误; sc.next()
无法在此代码中返回空字符串。尝试通过以下方式进行编辑:
while(sc.hasNext()) {
s = sc.next();
if(s.length() == 0) {
System.out.println("Woah, Nelly!");
break;
}
// ...
}
看看是否可以使程序打印“哇,妮莉!”输入空白行或其他任何内容。我不能,并且假设我正确理解了the documentation,那么if
条件在这里就不可能成立(强调我的意思):
根据定界模式的类型,可能会返回空令牌。例如,模式
"\\s+"
将不返回空令牌,因为它与定界符的多个实例匹配。分隔模式“ \ s”可能返回空令牌,因为它一次只能通过一个空格。
此模式"\\s+"
是默认模式,并且您没有设置其他模式,因此扫描仪绝不要返回空令牌。因此,严格的答案是:“没有break
语句,有没有办法写这个程序?”是:是的,您只需删除if(...) break;
代码,它就不会以任何方式改变行为。
但是,这并不是解决问题的真正方法,因为它不能为用户提供退出程序的方法。您应该使用nextLine()
而不是next()
来允许用户读取空白行。