亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查號碼是否是唯一號碼

檢查號碼是否是唯一號碼

米琪卡哇伊 2023-07-13 14:16:10
我編寫了一個程序來檢查一個數字是否是唯一的數字。[唯一數字是沒有重復數字和前導零的數字。]我編寫了以下代碼:    Scanner sc=new Scanner(System.in)    System.out.println("Enter the number to be checked: ");    String num=sc.nextLine();    if(num.charAt(0)!='0')    {           Outer:        for(int i=0;i<num.length();i++)        {            for(int j=0;j<num.length();j++)            {                if(num.charAt(i)==num.charAt(j))                {                    System.out.println("No, "+num+" is not a Unique number.");                    break Outer;                }            }            if(i==num.length()-1)            {                System.out.println("Yes, "+num+" is a Unique number.");            }        }    }    else        System.out.println("No, "+num+" is not a Unique number as it has leading zeros.");問題是,任何數字都顯示為不唯一,甚至 12345。我想知道我哪里出了問題。
查看完整描述

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 是輸入數字中的位數。


查看完整回答
反對 回復 2023-07-13
?
慕容森

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);


查看完整回答
反對 回復 2023-07-13
?
aluckdog

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))

            ...

此外,您應該只輸出“...是一個唯一的數字”。完成外循環后的消息。


查看完整回答
反對 回復 2023-07-13
?
墨色風雨

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()));


查看完整回答
反對 回復 2023-07-13
?
慕少森

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");

        }

    }

}

這段代碼會給出正確的答案


查看完整回答
反對 回復 2023-07-13
  • 5 回答
  • 0 關注
  • 210 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號