5 回答

TA貢獻1827條經驗 獲得超9個贊
假設輸入數字的長度為 10,并且“i”在 for 循環中已達到值 5。
現在“j”的值為 0 到 9。
因此,當“j”等于 5 時,當您將第 5 個位置的數字與其自身進行比較時,if 條件變為 true(這始終為 true)。
如果添加 i != j 條件,它將解決問題:-
if(num.charAt(i)==num.charAt(j) and i != j)
或者,您可以修改 j 的循環,使其從 i + 1 開始,這樣就不會出現重疊。
for(int j=i+1;j<num.length();j++)
第二個選項要好得多,因為它將減少從 (n*n) 到 (n * (n - 1))/2) 的比較次數,其中 n 是輸入數字中的位數。

TA貢獻1853條經驗 獲得超18個贊
一種可能的解決方案是使用Stream
將您的字符轉換String
為a?Set
,然后如果集合的大小與字符串的長度相同,那么它是唯一的:
Scanner sc = new Scanner(System.in);
System.out.println("Enter the number to be checked: ");
String num = sc.nextLine();
boolean unique = Stream.of(num.split(""))
? ? .map(s -> new String(s))
? ? .collect(Collectors.toSet()).size() == num.length();
// With "1234" -> print true
// With "12342" -> print false
System.out.println(unique);

TA貢獻1847條經驗 獲得超7個贊
當 時,您的代碼將始終找到“重復”字符i == j。
您應該更改循環的索引,以免將字符與其自身進行比較:
for(int i=0;i<num.length();i++) {
for(int j=i+1;j<num.length();j++) {
if(num.charAt(i)==num.charAt(j))
...
此外,您應該只輸出“...是一個唯一的數字”。完成外循環后的消息。

TA貢獻1853條經驗 獲得超6個贊
您可以使用以下簡短而方便的方法:
String a = "123452";
String[] split = a.split("");
List<String> list = Arrays.asList(a.split(""));
Set<String> set = new HashSet<>(list);
System.out.println("Unique: " + (list.size() == set.size()));

TA貢獻2019條經驗 獲得超9個贊
import java.util.*;
public class spnum
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("Enter a number: ");
String num = sc.next();
int ctr = 0;
boolean isNumUnique = true;
for(int i = 0; i < num.length(); i++)
{
for(int j = 0; j < num.length(); j++)
{
if(num.charAt(i) == num.charAt(j))
{
ctr++;
}
}
if(ctr > 1)
{
isNumUnique = false;
}
ctr = 0;
}
if(isNumUnique == true)
{
System.out.println("Number is a unique number");
}
else
{
System.out.println("Number is not a unique number");
}
}
}
這段代碼會給出正確的答案
添加回答
舉報