![](/img/trans.png)
[英]Creating an N by N grid of letters so that no two adjacent letters are the same
[英]If in a String adjacent letters occurring in the word are same then print “same” otherwise “diff”
我正在嘗試,但有時輸入4整數會給出錯誤的輸出。 請更新我的代碼或給我一些想法。 以下是我的示例輸出。 和我正在嘗試的代碼。
輸出示例:-
input:-
3
remember
occurring
apple
diff
Same
same
碼:-
Scanner sc=new Scanner(System.in);
System.out.println("enter a number");
int flag=1;
int a=sc.nextInt();
for (int i = 0; i <a; i++) {
System.out.println("enter a string");
String s=sc.next();
char [] sq=s.toCharArray();
for (int j = 0; j < sq.length-1; j++) {
if(sq[j]==sq[j+1]) {
flag=0;
break;
}
}
if(flag==1) {
System.out.println("diff");
} else {
System.out.println("same");
}
}
您沒有在每次運行之間將標志重置為初始值。 注意,我已經將標志更改為布爾值而不是整數,並且現在在System.out.println()之前重置它。
package test;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("enter a number");
boolean flag=true;
int a=sc.nextInt();
for (int i = 0; i <a; i++) {
flag=true;
System.out.println("enter a string");
String s=sc.next();
char [] sq=s.toCharArray();
for (int j = 0; j < sq.length-1; j++)
{
if(sq[j]==sq[j+1])
{
flag=false;
break;
}
}
if(flag)
{
System.out.println("diff");
}
else
{
System.out.println("same");
}
}
}
}
只需使用正則表達式即可:更短,更簡單
public static void main(String[] args) {
String s = "dess";
boolean match = s.matches(".*([A-Za-z])\\1+.*");
if (match)
System.out.println("same");
else
System.out.println("diff");
}
您的代碼的問題是您永遠不會重置標志。 如果情況相同,那么在程序的其余執行時間中,標記將保持為0。 因此,在第一個“相同”之后的所有情況也將產生“相同”。 為了解決這個簡單的問題,請將您的flag = 0
代碼移動到第一個while循環內。 就像這里的某個地方:
for (int i = 0; i <a; i++) {
flag = 1;//<-- reset your flag variable
System.out.println("enter a string");
String s=sc.next();
char [] sq=s.toCharArray();
for (int j = 0; j < sq.length-1; j++)
{
etc....
那應該解決您的問題。 我希望這有幫助 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.