有人能告诉我这里做错了什么吗?我试图显示星号的位置,但我一直得到1。
包proj2; import java.util.Scanner;
/**
* <p> Title: Project 2: String Manipulation </p>
* <p> Description: Ask the user to enter a URL and it will display
* the protocol, domain name and file name specified. </p>
* @author Mario Mendoza
*
*/
public class Project2 {
/**
*
* @param args arguments
*/
public static void main(String[] args ) {
Scanner s = new Scanner(System.in );
String sentence;
String word1;
String word2;
String word3;
String word4;
String asterisks1 = "*";
String asterisks2 = "*";
String asterisks3 = "*";
int firstWord;
int secondWord;
int thirdWord;
int fouthWord;
int wordLength1;
int wordLength2;
int wordLength3;
int wordLength4;
int positionOfAsterisks1;
int positionOfAsterisks2;
int positionOfAsterisks3;
char firstLetter;
int total;
word1 = s.next();
word2 = s.next();
word3 = s.next();
word4 = s.next();
System.out.println("You typed " + word1 + asterisks1 + word2 + asterisks2 + word3 + asterisks3 + word4);
sentence = new String(word1 + asterisks1 + word2 + asterisks2 + word3 + asterisks3 + word4);
wordLength1 = word1.length();
System.out.println(word1 + " has length " + wordLength1);
wordLength2 = word2.length();
System.out.println(word2 + " has length " + wordLength2);
wordLength3 = word3.length();
System.out.println(word3 + " has length " + wordLength3);
wordLength4 = word4.length();
System.out.println(word4 + " has length " + wordLength4);
positionOfAsterisks1 = sentence.indexOf(asterisks1);
positionOfAsterisks2 = sentence.indexOf(asterisks2);
positionOfAsterisks3 = sentence.indexOf(asterisks3);
System.out.println("The asterisks were found at position " + positionOfAsterisks1 + ", " + positionOfAsterisks2 + ", and " + positionOfAsterisks3);
}
}
让您的程序执行以下任务: 提示用户输入仅包含四个单词的String,仅分隔 用星号。输入字符串不应包含任何空格。这种类型的一个例子 这个程序将收到的输入是我*爱*计算机*科学。显示 用户的输入(作为用户确认程序理解输入)。 分别存储四个单词中的每个单词。 显示每个单词的长度。例如: 我的长度是1。 爱有长度4。 电脑长8。 科学长度为7。 显示原始字符串中星号的位置。例如: 在第1,6和15位发现了星号。 显示第一个单词的最后一个字母。 显示四个单词的总聚合长度。 此外,请确保在文件顶部包含一个JavaDoc注释,其中包括 程序的标题,描述和作者姓名。 4样品运行 你打字我爱*计算机*科学。 我的长度是1。 爱有长度4。 电脑长8。 科学长度为7。 在第1,6和15位发现了星号。 第一个单词的最后一个字母是I. 这四个单词的总长度为20个字母。
答案 0 :(得分:0)
问题是您总是在给定字符串中搜索相同的值,即*
。你对变量的命名并不重要,你实际上是在运行这行3次:
positionOfAsterisks1 = sentence.indexOf('*');
使用3个不同的变量,但每次都会返回1.这是因为每次重新开始时,都会点击第一个星号,然后返回true。
您需要做的是使用第二个参数,即从开始的位置。
positionOfAsterisks1 = sentence.indexOf(asterisks1);
int temp = positionOfAsterisks1 + 1;
positionOfAsterisks2 = sentence.indexOf(asterisks1,temp);
temp = positionOfAsterisks2 + 1;
positionOfAsterisks3 = sentence.indexOf(asterisks1,temp);
这是做什么
第一行返回值1.下一行将temp
设置为2.现在搜索从第三位置开始(因为数组索引从0开始),并且因此不包括第一个星号。然后它会点击第7个字符*
并返回6.再次将temp设置为7,再次搜索从第8个字符开始,然后继续直到它在15处再次到达星号。
注意强>
您不需要使用3个单独的变量来保持相同的*
,这只是浪费空间。我建议使用相同的变量并消除其他两个变量!
答案 1 :(得分:0)
public static void main(String[] args ) {
Scanner s = new Scanner(System.in );
String sentence;
String word1;
String word2;
String word3;
String word4;
word1 = s.next();
word2 = s.next();
word3 = s.next();
word4 = s.next();
System.out.println("You typed " + word1 + "*" + word2 + "*" + word3 + "*" + word4);
sentence = new String(word1 + "*" + word2 + "*" + word3 + "*" + word4);
System.out.println(word1 + " has length " + word1.length());
System.out.println(word2 + " has length " + word2.length());
System.out.println(word3 + " has length " + word3.length());
System.out.println(word4 + " has length " + word4.length());
System.out.print("The asterisks were found at position ");
// get the position of * and store the position index
int i = 0;
String positionOfAsterisks = "";
while (i < sentence.length()){
if (sentence.charAt(i) == '*')
positionOfAsterisks += i + ", ";
i++;
}
// remove the last comma and empty space then add in full stop
positionOfAsterisks = positionOfAsterisks.substring(0, positionOfAsterisks.length()-2);
positionOfAsterisks += "." ;
System.out.print(positionOfAsterisks);
}
我没有使用indexOf,而是使用循环来遍历你的&#39;句子。另外,我删除了无用变量的声明。
IndexOf将仅返回它从第一个索引中找到的索引(如果它未在方法的第二个arg中声明)。而IndexOf方法将第一个位置返回为1而不是0。