求助java数组删除重复数字

epansy 2016-06-14 04:08:27
如题java数组类似 3337779822773308,希望输出379820.
但是解题过程不能出现list,iscontain,array.next等数组或其他自带的function。
就是完全只用普通的for,if语句来做。 我目前的思路是从第0个数开始,ints【0】跟后面每一个数字比较,不一样的就跟在ints【0】后面。

代码:
for (int i=0;i<length-1;i++){
for(int j=i+1;j<length;j+){
if(ints[i] != ints[j]){
int index = i+1;
ints[index]=ints[j];
index++;
}
}
}

首先这段代码总是报数组容量不够,实在不明白为什么。另外这样做出来会有多出来的数字,不知道该拿这些数字怎么办。求助大神~~~
...全文
791 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2016-06-30
  • 打赏
  • 举报
回复
ouzhijian 2016-06-30
  • 打赏
  • 举报
回复
引用 22 楼 hemowolf 的回复:
[quote=引用 21 楼 ouzhijian 的回复:] [quote=引用 楼主 epansy 的回复:] 如题java数组类似 3337779822773308,希望输出379820. 但是解题过程不能出现list,iscontain,array.next等数组或其他自带的function。 就是完全只用普通的for,if语句来做。 我目前的思路是从第0个数开始,ints【0】跟后面每一个数字比较,不一样的就跟在ints【0】后面。 代码: for (int i=0;i<length-1;i++){ for(int j=i+1;j<length;j+){ if(ints[i] != ints[j]){ int index = i+1; ints[index]=ints[j]; index++; } } } 首先这段代码总是报数组容量不够,实在不明白为什么。另外这样做出来会有多出来的数字,不知道该拿这些数字怎么办。求助大神~~~
楼主给分吧,我以你的思路给你弄了一份了[/quote] 没发现楼主结帖率为0吗[/quote] 不会看,请指教
MAO_JIN_DAO 2016-06-27
  • 打赏
  • 举报
回复
1.数组容量不够是因为数组越界,算法问题。 2.有多出来的数字是你没有为index的数组添加结束符。 代码如下:
int []num = new int []{3,3,3,7,7,7,9,8,2,2,7,7,3,3,0,8};
		int length = num.length;
		int i,j;
		int index = 0;
		for(i=1;i<length;i++)
		{
			for(j=0;j<=index;j++)
				{
					if(num[i] == num[j]) break;	//如果与已筛选出的数相同,则进行下一个数的判断
					if(j == index)              // j == index 判断完毕,没有相同的,将其添加到下一位
					{
						num[++index] = num[i];
					}
				}
		} 
		num[++index]='\0';                  //全部筛选完毕后,为筛选数组添加结束符
		for(i=0;i<index;i++)
			System.out.println(num[i]);
温柔狠角色 2016-06-26
  • 打赏
  • 举报
回复
可以用正则表达式去除重复元素的
  • 打赏
  • 举报
回复
兄弟,你的思路可能有点难实现哦, “我目前的思路是从第0个数开始,ints【0】跟后面每一个数字比较,不一样的就跟在ints【0】后面。” 你的意思是:不一样的字符就留下来,对吧?这本身就是题目的要求啊,是目的,而不是思路和方法…… 我认为好点的思路是: 利用for循环遍历每一个元素,从nts【0】开始跟后面的数作比较,相反,只要遇到有相同的数字,就break,无须在比较了,接着下一个数。如果当前数和后面的所有数都比较了,没有发现相同的数,就输出。程序段如下: package biaozhun; import java.util.Scanner; public class Text { public static void main(String[] args) { Scanner s=new Scanner(System.in); //获取键盘里面输入的字符串 System.out.println("请输入字符串"); String sr=s.nextLine();//把字符串整行取出 char ch[]=sr.toCharArray();//把字符串放入数ch【】中 int j=0;//初始化j boolean b=false; for(;j<=ch.length-2;j++){ for(int i=j+1;i<=ch.length-1;i++){ if(ch[j]==ch[i]){ b=false; break;//遇到相同字符,立即结束循环,进入下一个数的检验 } b=true; } if(b==true){ System.out.print(ch[j]); } } if(j==ch.length-1){ System.out.print(ch[ch.length-1]);//输出最后一个数字(最后的数字因为不需要比较,所以无法被for嵌套输出) } } } 这是完整程序,我测试过了,可以运行,你可以试一下(只是不清楚我程序里面是否存在楼主声明不能用的方法)…………
橙子赖 2016-06-25
  • 打赏
  • 举报
回复
@Test public void primeNumber(){ int[] a={3,3,3,7,7,7,9,8,2,2,7,7,3,3,0,8}; for (int i=0;i<a.length;i++) { for(int j=i+1;j<a.length;j++){ if(a[i]==a[j]){ a[j]=-1; } } } for(int q=0;q<a.length;q++){ if(a[q]>=0)System.out.print(a[q]); } }
贾谷瑶 2016-06-22
  • 打赏
  • 举报
回复

int[] num = {3,3,3,7,7,7,9,8,2,2,7,7,3,3,0,8};
		int[] result = new int[num.length];
		int n=0;	
		for(int i=0;i<num.length;i++)
		{
			boolean flag = true;
			if(i==0)
			{
				result[0] = num[0];
			}
			for(int j=0;j<n;j++)
			{
				if(num[i] == result[j])
				{
					flag = false;
					break;
				}
			}
			if(flag == true)
			{
				result[n++]=num[i];
				System.out.print(num[i]+",");
			}
		}

HerveyHall 2016-06-22
  • 打赏
  • 举报
回复
引用 22 楼 hemowolf 的回复:
没发现楼主结帖率为0吗
HerveyHall 2016-06-22
  • 打赏
  • 举报
回复
/**
 * 如下问题的解决方案: <br>
 * 如题java数组类似 3337779822773308,希望输出379820.
 * 但是解题过程不能出现list,iscontain,array.next等数组或其他自带的function。 就是完全只用普通的for,if语句来做。
 * <ul>
 * 参数类型:
 * <li>整型</li>
 * <li>字符串型</li>
 * <li>整型数组</li>
 * <li>字符数组</li>
 * </ul>
 * <ul>
 * 返回值类型:
 * <li>整型</li>
 * </ul>
 * 
 * @author Administrator
 *
 */
public class Solution {

	public int getNumber(int input) {
		return getNumber(Integer.toString(input));
	}

	public int getNumber(String input) {
		return getNumber(input.toCharArray());
	}

	public int getNumber(char[] input) {
		int[] result = new int[input.length];
		for (int i = 0; i < input.length; i++)
			result[i] = Integer.parseInt(Character.toString(input[i]));
		return getNumber(result);
	}

	/**
	 * 获取问题的结果
	 * 
	 * @param input 输入的数
	 * @return 如题结果数
	 */
	public int getNumber(int[] input) {
		boolean[] temp = new boolean[10];// 表示每个数字是否重复的临时标记
		int index = 0;// 表示未重复的数的数量即生成新数的位数
		// 遍历原数组
		for (int i = 0; i < input.length; i++)
			// 将出现过的数标记为重复
			if (!temp[input[i]]) {
				temp[input[i]] = true;
				input[index] = input[i];// 由于当一个数重复出现时一定在这个数的后面,所以直接放入原数组的前面
				index++;// 位数增加1
			}
		int result = 0;
		// 生成新数
		for (int i = 0; i < index; i++)
			result += Math.pow(10, index - 1 - i) * input[i];
		return result;
	}

	// Test
	public static void main(String[] args) {
		System.out.println(new Solution().getNumber("3337779822773308"));
	}
}

输出结果:379820
小灰狼 2016-06-22
  • 打赏
  • 举报
回复
引用 21 楼 ouzhijian 的回复:
[quote=引用 楼主 epansy 的回复:] 如题java数组类似 3337779822773308,希望输出379820. 但是解题过程不能出现list,iscontain,array.next等数组或其他自带的function。 就是完全只用普通的for,if语句来做。 我目前的思路是从第0个数开始,ints【0】跟后面每一个数字比较,不一样的就跟在ints【0】后面。 代码: for (int i=0;i<length-1;i++){ for(int j=i+1;j<length;j+){ if(ints[i] != ints[j]){ int index = i+1; ints[index]=ints[j]; index++; } } } 首先这段代码总是报数组容量不够,实在不明白为什么。另外这样做出来会有多出来的数字,不知道该拿这些数字怎么办。求助大神~~~
楼主给分吧,我以你的思路给你弄了一份了[/quote] 没发现楼主结帖率为0吗
Coder_ChanBin 2016-06-17
  • 打赏
  • 举报
回复
for循环,不一样的放到新数组中,然后循环遍历去判断每次是否是新的,假如存在就跳过,继续执行下一次循环
ouzhijian 2016-06-17
  • 打赏
  • 举报
回复
引用 楼主 epansy 的回复:
如题java数组类似 3337779822773308,希望输出379820. 但是解题过程不能出现list,iscontain,array.next等数组或其他自带的function。 就是完全只用普通的for,if语句来做。 我目前的思路是从第0个数开始,ints【0】跟后面每一个数字比较,不一样的就跟在ints【0】后面。 代码: for (int i=0;i<length-1;i++){ for(int j=i+1;j<length;j+){ if(ints[i] != ints[j]){ int index = i+1; ints[index]=ints[j]; index++; } } } 首先这段代码总是报数组容量不够,实在不明白为什么。另外这样做出来会有多出来的数字,不知道该拿这些数字怎么办。求助大神~~~
楼主给分吧,我以你的思路给你弄了一份了
ouzhijian 2016-06-17
  • 打赏
  • 举报
回复
		String num="3333333333333qwerqwerqwqqqqqqqqqqqqqqqqqqqqqqqqq333333333333333332222222222222222111111111111111111113333333333333333333322222222222222222221111111111111111111";
		for (int i = 0; i < num.length()-1; i++) 
		{
			String value=num.substring(0,i+1);
			String c=num.substring(i,i+1);
			for (int j = i; j < num.length(); j++) {
				String k=num.substring(j,j+1);
				if(!c.equals(k)){
					value+=k;
				}
			}
			num=value;
		}
		System.out.println(num);
跳动de指尖 2016-06-16
  • 打赏
  • 举报
回复
我java不怎么样,好多年没接触过了,我用javascript的方式吧。。

var array = "3337779822773308".split("");
var newNumber = [];
for(var i = 0;i<array.length;i++){
    if(newNumber.indexOf(array[i]) == -1){
        newNumber.push(array[i])
    }
}
console.info(newNumber.join(""));
soton_dolphin 2016-06-16
  • 打赏
  • 举报
回复
Arrays.stream(your array).distinct().foreach(x -> System.out.print(x))
soton_dolphin 2016-06-16
  • 打赏
  • 举报
回复
用 Arrays.stream().distinct.foreach(() -> System.out.print())
Mainers 2016-06-16
  • 打赏
  • 举报
回复
		int[] loop = {3,3,3,7,7,7,9,8,2,2,7,7,3,3,0,8};
		for (int i=0;i<loop.length;i++){
			for(int j=0;j<i;j++){
				if (loop[i] == loop[j]){
					loop[i] = loop[0];
				}
			}
		}		
		for (int i=0;i<loop.length;i++){
			if(loop[i]==loop[0]){
				if(i==0){
					System.out.print(loop[0]);
				}
			}else{
				System.out.print(loop[i]);
			}
				
			
		}
		
比较简单的思路是把所有跟以前出现过的数字全部改成数组的第一个值,然后打印的时候第一个值打印一边,别的要是碰到再跟第一个值一样的就跳过,这样连临时数组都不要建了
  • 打赏
  • 举报
回复

import java.util.HashSet;
import java.util.Set;

public class Ddq {

	public static void main(String[] args) {
		int i[] = {3, 3, 3, 7, 7, 7, 9, 8, 2 , 2, 7, 7, 3, 3, 0, 8};
		Set<Integer> set = new HashSet<Integer>();
		for (int j = 0; j < i.length; j++) {
			set.add(i[j]);
		}
		System.out.println(set);
	}
}

解开者 2016-06-15
  • 打赏
  • 举报
回复
引用 9 楼 qq_34667928 的回复:
[quote=引用 6 楼 hjgzj 的回复:]

import java.util.HashSet;
import java.util.Set;

public class Ddq {

	public static void main(String[] args) {
		int i[] = {3, 3, 3, 7, 7, 7, 9, 8, 2 , 2, 7, 7, 3, 3, 0, 8};
		Set<Integer> set = new HashSet<Integer>();
		for (int j = 0; j < i.length; j++) {
			set.add(i[j]);
		}
		System.out.println(set);
	}
}

楼主的要求是不准用集合 其次Set集合是无序的,你确定还能按要求输出379820??[/quote] TreeSet可以保持元素的自然顺序
baidu_34630879 2016-06-15
  • 打赏
  • 举报
回复
package test;

public class Test {
	int c = -2147483648;//标记
	int[] in1 = new int[] { 3, 3, 3, 7, 7, 7, 9, 8, 2, 2, 7, 7, 3, 3, 0, 8, 50,
			46, 82, 64, 50, 50, 82, 94, 15, -56, -56, -58, -46, 7, 7, 7, 3, 3,
			3, 50, 9, 8, -56, -58, 100, -100, 100, -100,78 };

	public void toFC() {//判断标记有没有被占用
		for (int t = 0; t < in1.length; t++) {
			if (in1[t] == c) {
				c++;
			}else {
				break;
			}
		}
	}

	public void f() {//冒泡比较
		for (int i = 0; i < in1.length; i++) {
			if (in1[0] == c) {
				break;
			}
			for (int f = i; f < in1.length - 1; f++) {
				if (in1[i] == in1[f + 1]) {
					in1[f + 1] = c;//打标记
				}
			}
		}
	}

	public void toF() {//遍历
		for (int i = 0; i < in1.length; i++) {
			if (in1[i] != c) {
				System.out.print(in1[i] + " ");
			}
		}
	}

	public static void main(String[] args) {
		Test t = new Test();
		t.toFC();
		t.f();
		t.toF();
	}
}
加载更多回复(11)

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧