刷题DAY30

求数列的和

题目:数列的定义如下:数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和

输入:输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和m的含义如前所述。

输出:对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。

输入:

81 4 2 2

输出:

94.73 3.41

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            double n = sc.nextDouble();
            double num = n;
            int m = sc.nextInt();
            for (int i = 1; i < m; i++) {
               double x= Math.sqrt(n);
               num+=x;
               n=x;
            }
            System.out.println(String.format("%.2f",num));
        }
    }
}

知识点

sqrt()

sqrt() 方法用于返回参数的算术平方根。

语法

double sqrt(double d)

参数

  • d – 任何原生数据类型。

返回值 返回参数的算术平方根

实例

public class Test{ 
public static void main(String args[]){
        double x = 11.635;
        double y = 2.76;
    System.out.printf("e 的值为 %.4f%n", Math.E);
    System.out.printf("sqrt(%.3f) 为 %.3f%n", x, Math.sqrt(x));
     }
}

编译以上程序,输出结果为:

e 的值为 2.7183
sqrt(11.635) 为 3.411

hasNext()、next()、remove()

在Java中,Iterator 接口是集合框架中用于迭代访问集合元素的标准方式之一。它定义了三个主要方法:

  1. hasNext(): 用于检查迭代器是否还有下一个元素。

  2. next(): 用于获取迭代器的下一个元素。

  3. remove(): 用于从集合中移除迭代器最后访问过的元素。

下面是这些方法的源码解释:

1. hasNext()
public interface Iterator<E> {
    boolean hasNext();
}

在源码中,hasNext() 方法没有具体的实现,因为它是一个接口方法,由实现 Iterator 接口的类(如 ArrayListLinkedList 等)来实现。它的作用是检查迭代器是否还有下一个元素。当集合中还有未被遍历的元素时,hasNext() 返回 true,否则返回 false

2. next()
public interface Iterator<E> {
    E next();
}

hasNext() 类似,next() 也是一个接口方法,没有具体的实现。当调用 next() 方法时,迭代器会返回当前位置的元素,并将迭代器的位置移到下一个元素。如果没有下一个元素,会抛出 NoSuchElementException 异常。

3. remove()
public interface Iterator<E> {
    void remove();
}

remove() 方法用于从集合中移除迭代器最后访问过的元素。在调用 remove() 方法之前必须先调用 next() 方法,否则会抛出 IllegalStateException 异常。remove() 方法不是所有的 Iterator 实现都支持的,如果不支持,会抛出 UnsupportedOperationException 异常。

总的来说,这三个方法是 Iterator 接口的核心方法,通过它们可以在集合中实现遍历并对元素进行操作。

例题:

好的,以下是使用代码形式详细解释 Iterator 的三个方法:

import java.util.ArrayList;
import java.util.Iterator;
​
public class IteratorExample {
    public static void main(String[] args) {
        // 创建一个整数列表
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(-2);
        numbers.add(3);
        numbers.add(-4);
        numbers.add(5);
​
        // 使用 Iterator 遍历列表并移除负数
        Iterator<Integer> iterator = numbers.iterator();
        while (iterator.hasNext()) {
            Integer number = iterator.next();
            if (number < 0) {
                iterator.remove(); // 移除负数
            }
        }
​
        // 打印移除负数后的列表
        System.out.println("移除负数后的列表: " + numbers);
​
        // 使用 Iterator 计算列表中所有正数的总和
        int sum = 0;
        iterator = numbers.iterator(); // 重新获取迭代器,重置位置
        while (iterator.hasNext()) {
            Integer number = iterator.next();
            sum += number;
        }
​
        // 输出正数总和
        System.out.println("正数总和: " + sum);
    }
}

在这个例子中,我们创建了一个整数列表 numbers,然后使用 Iterator 来遍历列表并移除负数。首先我们使用 iterator() 方法获取列表的迭代器,然后在 while 循环中使用 hasNext() 方法检查是否还有下一个元素,如果有,则使用 next() 方法获取下一个元素。如果当前元素是负数,我们就使用 remove() 方法将其移除。完成移除后,我们打印移除负数后的列表。

接着,我们再次使用 Iterator 计算列表中所有正数的总和。同样地,我们获取迭代器,然后在 while 循环中使用 hasNext()next() 方法来遍历列表,并将所有正数累加到变量 sum 中。最后,我们输出正数的总和。

通过这个例子,可以清楚地看到 Iterator 的三个方法 hasNext()next()remove() 的使用方式和效果。

举例2

好的,下面是另一个例子,演示如何使用 Iterator 的三个方法来处理字符串列表:

import java.util.ArrayList;
import java.util.Iterator;
​
public class IteratorStringExample {
    public static void main(String[] args) {
        // 创建一个字符串列表
        ArrayList<String> strings = new ArrayList<>();
        strings.add("apple");
        strings.add("banana");
        strings.add("orange");
        strings.add("grape");
​
        // 使用 Iterator 遍历列表并输出字符串的长度
        Iterator<String> iterator = strings.iterator();
        while (iterator.hasNext()) {
​
//这行代码是在迭代器 iterator 上调用 next() 方法,然后将返回的元素赋值给字符串变量 str。
            String str = iterator.next();
            System.out.println("字符串 '" + str + "' 的长度为: " + str.length());
        }
​
        // 使用 Iterator 移除长度超过5的字符串
        iterator = strings.iterator(); // 重新获取迭代器,重置位置
        while (iterator.hasNext()) {
            String str = iterator.next();
            if (str.length() > 5) {
                iterator.remove(); // 移除长度超过5的字符串
            }
        }
​
        // 打印移除长度超过5的字符串后的列表
        System.out.println("移除长度超过5的字符串后的列表: " + strings);
    }
}

在这个例子中,我们首先创建了一个字符串列表 strings,然后使用 Iterator 来遍历列表并输出每个字符串的长度。我们使用 hasNext()next() 方法来遍历列表,然后在循环中获取每个字符串并输出其长度。

接着,我们再次使用 Iterator 来移除列表中长度超过5的字符串。我们重新获取迭代器,然后使用 hasNext()next() 方法遍历列表。如果当前字符串的长度超过5,我们就使用 remove() 方法将其移除。

最后,我们打印移除长度超过5的字符串后的列表。通过这个例子,可以清楚地看到 Iterator 的三个方法 hasNext()next()remove() 的使用方式和效果。

 

 

 

分割整数

题目:从键盘输入一个长正整数(不超过10位),从高位开始逐位分割并输出

输入:正整数n,不含前导零

输出:分割的整数序列,各整数之间用空格格开。注意,最后一个数字后面没有空格

输入:654321

输出:6 5 4 3 2 1

import java.util.Scanner;
 
public class SplitInteger {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        System.out.println("请输入一个不超过10位的长正整数:");
        String number = scanner.nextLine();
 
        for (int i = number.length() - 1; i >= 0; i--) {
            System.out.print(number.charAt(i));
            if (i % 3 == 0 && i != 0) {
                System.out.print(" "); // 每三位数字之后可以添加分隔符,如空格
            }
        }
 
        scanner.close();
    }
}
  • 30
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值