我正在努力制作猪拉丁计划: 1.如果输入的单词以辅音开头,则将该辅音放在单词的末尾并添加一个。 2.如果输入的单词以元音开头,则在末尾添加一个。
我正在使用while循环来检查输入是否都是字母,并一直询问输入。程序编译时没有错误,但是当我运行它时,在我尝试获取单词的第一个字母后,当while循环退出时说我的索引超出界限时,异常继续出现在该行,这似乎是基本但我不知道为什么这个例外即将来临
import java.util.Scanner;
public class Rev
{
public static void main (String[] args)
{
Scanner input = new Scanner(System.in);
String vow = "aeiou";
String ques = "Enter word";
String reply ="";
int counter = 0;
String newword = "";
boolean isword = false;
String let = "";
while(isword)
{
System.out.println(ques);
reply = input.nextLine();
for (int i =0;i<reply.length();i++)
{
let=reply.substring(i,i+1);
if (let.matches("[a-zA-Z]")) counter++;
}
if (counter==reply.length()) isword=true;
}
String first = reply.substring(0,1);
if (!(vow.contains(first))) newword = reply.substring(1,reply.length())+first+"ay";
else newword = reply+"way";
System.out.print("New word is "+newword);
}
}
答案 0 :(得分:2)
您的布尔值“isword”在开始时设置为false,因此它会完全跳过while循环。这意味着字符串“reply”是一个空字符串,其中包含零个字符,因此您无法在其上调用substring(0,1)。这将要求您的字符串“回复”至少包含一个字符。这就是导致索引越界错误的原因。
将布尔值“isword”更改为true,您将开始循环。然后更改if(counter == reply.length())将isword更改为false而不是true,并且您将跳出while循环。
答案 1 :(得分:1)
您永远不会输入while(isword)
循环,因为isword为false。
由于reply
仍然是一个空字符串,因此尝试从零字符的字符串中获取一个字符会导致您的问题。
只需将布尔值isword初始化为true
或使用do-while。
答案 2 :(得分:0)
如果您认真对待猪拉丁语翻译作为学生项目,请用适当的语言书写。您可以在Korn shell中执行此操作,例如十行代码。
虽然真实
做
打印输入字:
读WORD
如果[[$ WORD ==“^ [aeiou]”]]
然后
打印“$ {WORD} ay”
否则
INITCONS = $(echo $ WORD | sed's / ^(。)。* / \ 1 /')
REMAINDER = $(echo $ WORD | sed's /^.//')
打印“$ {REMAINDER} $ {INITCONS} ay”
科幻
完成