0

我必须创建一个程序来返回下一个非重复字符..

ex我给...tweet
它应该将输出返回为w...

public class str_next {

    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the string");
        String s = br.readLine();
        revString(s);
    }

    static char revString(String str) {
        int i = 0;
        int j;
        int n = str.length();
        for (i = 0; i < n; i++) {
            for (j = i + 1; j < n; j++) {
                char c = str.charAt(i);
                char d = str.charAt(j);
                if (c != d) {
                    System.out.print(d);
                }
            }
        }
    }
}

我收到错误,因为..缺少返回语句..

谁能告诉我..我该如何解决这样的问题..我错在哪里..?

4

9 回答 9

1

要解决您的问题,只需添加,

return d;

在你的功能中。但最好了解这实际上是如何工作的:

函数/方法写成

accessor_type return_type function_name(parameter_list)
{
 //stuff to do in your code
}

例如

public  char returnChar(int a)
 |       |       |       |
 |       |       |       |
 ^       ^       ^       ^
accessor return  name   parameter

这意味着这个函数将返回一个字符

从某种意义上说,您需要在函数中使用这样的字符

return char;

尝试阅读方法及其返回类型。:)

参考:

于 2013-10-10T04:54:04.910 回答
0

你的程序应该是这样的:

import java.io.*;

public class str_next {

    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter the string");
        String s = br.readLine();
        revString(s);
    }

    static char revString(String str) {
        int i = 0;
        int j;
        int n = str.length();
        for (i = 0; i < n; i++) {
            for (j = i + 1; j < n; j++) {
                char c = str.charAt(i);
                char d = str.charAt(j);
                if (c != d) {
                    System.out.print(d);
                }
            }
        }
        return 0;
    }
}
于 2013-10-10T05:12:59.903 回答
0

你还没有写return语句。使用return ;

于 2013-10-10T04:44:58.197 回答
0

您的代码中缺少 return 语句。

这是返回您想要的代码的代码

代码

public static Character findFirstNonRepeated(String input) {
    // create a new hashtable:
    Hashtable<Character, Object> hashChar = new Hashtable<Character, Object>();

    int j, strLength;
    Character chr;
    Object oneTime = new Object();
    Object twoTimes = new Object();

    strLength = input.length();

    for (j = 0; j < strLength; j++) {
        chr = new Character(input.charAt(j));
        Object o = hashChar.get(chr);

        /*
         * if there is no entry for that particular character, then insert
         * the oneTime flag:
         */
        if (o == null) {
            hashChar.put(chr, oneTime);
        }
        /*

  */
        else if (o == oneTime) {
            hashChar.put(chr, twoTimes);
        }
    }

    /*
     * go through hashtable and search for the first nonrepeated char:
     */

    int length = strLength;
    for (j = 0; j < length; j++) {
        chr = new Character(input.charAt(j));
        Object c = null;
        if (hashChar.get(chr) == oneTime)
            return chr;
    }
    /*
     * this only returns null if the loop above doesn't find a nonrepeated
     * character in the hashtable
     */
    return null;

}

像这样使用

char my =  findFirstNonRepeated("twwwweety");
System.out.println(my);

这将返回y

于 2013-10-10T05:02:29.340 回答
0

您已将 revString(String str) 的返回类型编写为 char 并且没有返回任何字符。将该返回类型更改为 void 或添加行 return d; 对方法

于 2013-10-10T04:46:12.553 回答
0

将每个字符添加到 HashSet 并检查 hashset.add() 是否返回 true,如果返回 false,则从 hashset 中删除该字符。然后获取哈希集的第一个值会给你第一个不重复的字符。 算法:

  for(i=0;i<str.length;i++)
  {
    HashSet hashSet=new HashSet<>()
     if(!hashSet.add(str[i))
         hashSet.remove(str[i])
    }
  hashset.get(0) will give the non repeated character.
于 2015-11-23T12:34:12.383 回答
0

在 JAVA 中只使用 for 循环......这很容易......你可以在没有 java 中的集合的情况下做到这一点......试试吧......

公共类FirstNonRepeatedString {

public static void main(String args[]) {


    String input = "tweet";
    char process[] = input.toCharArray();
    boolean status = false;
    int index = 0;
    for (int i = 0; i < process.length; i++) {
        for (int j = 0; j < process.length; j++) {

            if (i == j) {
                continue;
            } else {
                if (process[i] == process[j]) {
                    status = false;
                    break;
                } else {
                    status = true;
                    index = i;
                }
            }

        }
         if (status) {
        System.out.println("First non-repeated string is : " + process[index] + " INDEX " + index);
        break;
    } 
    }
}

}

于 2016-06-18T09:17:51.073 回答
0
public class JavaPractice {

public static void main(String args[])
    {
System.out.println("Enter input String");
        Scanner s= new Scanner(System.in);
        String input= s.nextLine();
        int length=input.length();
        for(int i=0;i<length;i++)
        {
            int temp=0;
            for(int j=0;j<length;j++)
            {
                if(input.charAt(i)==input.charAt(j))
                {temp++;}
            }
            if(temp==1)
            {System.out.println(input.charAt(i));}

            }
}
}
于 2017-03-08T15:58:49.087 回答
0

试试这个, // 将字符串拆分为字符 // 检查 HashMap 中是否存在条目,如果是,则返回字符,如果否,则将值为 1 的元素插入

public static void main(String[] args) {
    String s = "rep e atit";
    char c = nonRepeat(s);
    System.out.println("The first non repeated character is:" + c);
}

private static char nonRepeat(String ss) {
    char c;
    HashMap<Character, Integer> hm = new HashMap<Character, Integer>();

    for (int i = 0; i < ss.length(); i++) {
        c = ss.charAt(i); // get each chaar from string
        if (hm.containsKey(c)) {// char is already in map, increase count
            hm.put(c, hm.get(c) + 1);
            return c;
        } else {
            hm.put(c, 1);
        }

    }

    return '0';
}
于 2016-03-09T21:47:40.143 回答