import java.util.*;public class Test { public static void main(String[] args) { List<Integer> nums = new ArrayList<Integer>(); for (int i = 0; i < 10; i++) { nums.add(i + 1); } System.out.print("初始数组:"); for (int i = 0; i < nums.size(); i++) { System.out.print(" " + nums.get(i)); } for (int t = 0; t < 3; t++) { for (int i = nums.size() - 1; i >= 0; i--) { if ((i - 1) % 2 != 0) { nums.remove(i); } } System.out.print("\n第"+(t+1)+"次删除后的数组:"); for (int i = 0; i < nums.size(); i++) { System.out.print(" " + nums.get(i)); } } } }这是我验证过的,关键是List要从后往前删,因为下标是动态变化的,不然会出问题。然后就是i=0对应的值是1不是0,所以别搞混了。PS:上面的帖居然不能修改,郁闷
感谢6楼的Tassdars ,7楼gaocaiying ,9楼的dreamhunter_lan,12楼的shixitong 看来list的用法还是很灵活的,以后要多用list了我的想法是用数组做位移操作的,但朋友告诉我list效率更高,list做读写操作效率比数组会很多吗?import java.util.*; public class TestList { public static void main(String[] args) { int m = 10;//记录数组元素的个数,初始化为10 //以数组的元素个数为判断条件,如果为1则判断结束 do{ m = sort(m); }while(m != 1); } //当数组个数不为1时,将偶数位的值赋给基数位 private int sort(int m) { int a[] = {1,2,3,4,5,6,7,8,9,10};
if(m == 1){ return 1; } else{ int k = 1; int n = 0; //记录当前写入位置 while( k < m ){
a[n] = a [k]; //将需要保留的值存到新的数组地址中 n++; //每次n都递加1 k += 2; //每次k都要自加2; } return n ; } } }
/** * @Project <CL-Allocation tool> * @version <1.0> * @Author <llddy> * @Date <2008-11-18> * @description <这题不是绕圈问题吧,是跟位数有关系,如果数组下标是奇数就删除该数组> */ public class Test84 { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); for (int i = 1; i < 11; i++) { list.add(i); } System.out.println(list); int n = getInt(list); System.out.println(n); }
public static Integer getInt(List<Integer> lists){ if(lists.size()==1){ return lists.get(0); }else{ for (int i = 0; i < lists.size(); i++) { if((i+1)%2==1){ lists.remove(i); }
public static void main(String[] args) {
List<Integer> nums = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
nums.add(i + 1);
}
System.out.print("初始数组:");
for (int i = 0; i < nums.size(); i++) {
System.out.print(" " + nums.get(i));
}
for (int t = 0; t < 3; t++) {
for (int i = nums.size() - 1; i >= 0; i--) {
if ((i - 1) % 2 != 0) {
nums.remove(i);
}
}
System.out.print("\n第"+(t+1)+"次删除后的数组:");
for (int i = 0; i < nums.size(); i++) {
System.out.print(" " + nums.get(i));
}
}
}
}这是我验证过的,关键是List要从后往前删,因为下标是动态变化的,不然会出问题。然后就是i=0对应的值是1不是0,所以别搞混了。PS:上面的帖居然不能修改,郁闷
public class Problem2 { /**
* @param args
*/
private Byte[] num={1,2,3,4,5,6,7,8,9,10};
ArrayList<Byte> alist=new ArrayList<Byte>();
private boolean isDelete;
public Problem2(){
isDelete=true;
}
public void delete(){
for(int i=0;i<num.length;i++){
alist.add(num[i]);
}
while(isDelete){
for(int i=0;i<alist.size();i++){
if((i+1)%2==1)
{
// alist.remove(i);
alist.set((byte)i,(byte)0);
}
}
for(int i=0;i<alist.size();i++){
if(alist.get(i)==0){
alist.remove(i);
}
}
if(alist.size()==1)
isDelete=false;
for(int i=0;i<alist.size();i++){
System.out.println("num["+i+"]="+alist.get(i));
}
System.out.println("");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Problem2 pl=new Problem2();
pl.delete(); }}
我这样可以达到目的
public static void main(String[] args)
{
List<Integer> l = new ArrayList<Integer>();
for(int i = 0; i < 10; i++)
l.add(i + 1);
System.out.println(Arrays.toString(l.toArray()));
remove(l);
System.out.println(Arrays.toString(l.toArray()));
}
public static int c(int n)
{
if( n < 2)
return 1;
int r = 0;
for(; n > 0 && (n % 2) == 0;r++)
n -= (2 << r);
return (r == 0 ? c(n -1) : r);
}
public static int locate(int n)
{
return n < 2 ? 1 : 2 << (c(n) - 1);
}
public static void remove(List<Integer> l)
{
int loc = locate(l.size());
Integer o = l.get(loc - 1);
l.clear();
l.add(o);
}
import java.util.ArrayList;
import java.util.List;public class DeleteWhenOdd { public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i = 1; i <= 10; i++) {
list.add(i);
}
for(int i = 0; list.size() > 1;) {
if( i >= list.size()) {
i = 0;
continue;
}
list.remove(i++);
}
System.out.println(list);
}
}
import java.awt.List;
import java.util.*;
public class TestList
{
public static void main(String args[])
{
ArrayList array=new ArrayList();
List list=new List();
for(int i=0;i<10;i++)
{
list.add(String.valueOf(i+1));//初始化list
}
while(list.getItemCount()>1)
{
for(int i=0;i<list.getItemCount();i++)
{
if((i+1)%2!=0)
{
array.add(list.getItem(i));
}
}
for(int i=0;i<list.getItemCount();i++)
{
for(int j=0;j<array.size();j++)
{
if(list.getItem(i).equals(array.get(j)))
list.remove(i);
}
}
for(int i=0;i<array.size();i++)
{
array.remove(i);
}
}
//最后输出结果
for(int i=0;i<list.getItemCount();i++)
{
System.out.println(list.getItem(i));
}
}
}
这样可以达到目的!
不过效力高低没有考虑太多!
public class TestList
{
public static void main(String[] args) {
int m = 10;//记录数组元素的个数,初始化为10 //以数组的元素个数为判断条件,如果为1则判断结束
do{
m = sort(m);
}while(m != 1);
}
//当数组个数不为1时,将偶数位的值赋给基数位
private int sort(int m)
{
int a[] = {1,2,3,4,5,6,7,8,9,10};
if(m == 1){
return 1;
}
else{
int k = 1;
int n = 0; //记录当前写入位置
while( k < m ){
a[n] = a [k]; //将需要保留的值存到新的数组地址中
n++; //每次n都递加1
k += 2; //每次k都要自加2;
}
return n ;
}
}
}
/**
* @Project <CL-Allocation tool>
* @version <1.0>
* @Author <llddy>
* @Date <2008-11-18>
* @description <这题不是绕圈问题吧,是跟位数有关系,如果数组下标是奇数就删除该数组>
*/
public class Test84 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i < 11; i++) {
list.add(i);
}
System.out.println(list);
int n = getInt(list);
System.out.println(n);
}
public static Integer getInt(List<Integer> lists){
if(lists.size()==1){
return lists.get(0);
}else{
for (int i = 0; i < lists.size(); i++) {
if((i+1)%2==1){
lists.remove(i);
}
}
return getInt(lists);
}
}
}
一个是数组的值 一个是数组下标。 从数组取值 不都是根据数组下标取吗?
数组的值---> [1,2,3,4,5,6,7,8,9,10]
数组下标---> 0,1,2,3,4,5,6,7,8,9