[英]How to compare elements in a single string?
當且僅當1和0並排重復多次時,我需要以1和0的字符串打印元素的索引。
例如:輸入:“0010011”輸出:“0,3,5”
重復從索引0,3和5開始。
這是我現在擁有的
Scanner keyboard = new Scanner(System.in);
ArrayList runs = new ArrayList();
System.out.println("Enter non empty string of 1s and 0s");
String input = keyboard.nextLine();
char[] array = input.toCharArray();
for(int i = 0; i < input.length(); i++)
{
if(array[i] == array[i++])
{
runs.add(i);
}
}
for(int i = 0; i<= array.length; i++)
{
System.out.println(runs);
}
當我測試這個時,我嘗試輸入“00100”並獲得“1,3,5”的輸出。 另一個測試輸入來自“0010011”以上並獲得“1,3,5,7”。 它似乎是打印奇數,而不是數字開始重復的索引。 誰能發現我做錯了什么? 我感覺它來自我在第一個for循環中的比較。
這應該工作:
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter non empty string of 1s and 0s");
String input = keyboard.nextLine();
char lastChar = '~'
for(int i=0; i<input.length() - 1; i++) {
if(input.charAt(i) == input.charAt(i + 1) && (i == 0 || input.charAt(i) != input.charAt(i - 1))) {
System.out.println(i);
}
}
我可以指出有三個直接的問題:
i++
,而您應該使用i + 1
。 i++
將增加的價值i
,所以你就錯過了一個索引那里下一次迭代。 input.length() - 2
,否則當你訪問最后一個索引的array[i + 1]
時,你會得到一個ArrayIndexOutOfBounds
異常。 0's
或1's
則當前邏輯將失敗。 它將打印0
和1
索引,例如00010
。 對於第三點,你應該做的是,一旦你發現兩個連續的字符相同,你應該跳過即將到來的相同角色。 你需要一個內循環。 可能是一段do-while
。
您應該將for
循環修改for
:
for(int i = 0; i < input.length() - 1; i++)
{
if(array[i] == array[i+1])
{
System.out.println(i);
do {
i++;
} while (i < input.length() - 1 && array[i] == array[i + 1]);
}
}
此外, ArrayList
沒有length
屬性。 您應該使用size()
方法來獲得最大大小。
順便說一句,這也可以使用正則表達式來完成。 好吧,你可能還沒有被教過這個,但這只是另一種可能的方式:
Pattern pattern = Pattern.compile("0{2,}|1{2,}");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.start());
}
那里有兩個問題:
首先,當postfix ++
在生效之前返回值時,所以你將array [i]與它自己進行比較。
另外,你每個循環都做兩個加1,所以只有奇數。
嘗試這個 :-
Scanner keyboard = new Scanner(System.in);
ArrayList runs = new ArrayList();
System.out.println("Enter non empty string of 1s and 0s");
String input = keyboard.nextLine();
char[] array = input.toCharArray();
for(int i = 0; i < input.length()-1; i++)
{
if(array[i] == array[i+1])
{
runs.add(i);
}
}
for(int i = 0; i<= array.length; i++)
{
System.out.println(runs);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.