求数列的和
题目:数列的定义如下:数列的第一项为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
接口是集合框架中用于迭代访问集合元素的标准方式之一。它定义了三个主要方法:
-
hasNext()
: 用于检查迭代器是否还有下一个元素。 -
next()
: 用于获取迭代器的下一个元素。 -
remove()
: 用于从集合中移除迭代器最后访问过的元素。
下面是这些方法的源码解释:
1. hasNext()
public interface Iterator<E> {boolean hasNext(); }
在源码中,hasNext()
方法没有具体的实现,因为它是一个接口方法,由实现 Iterator
接口的类(如 ArrayList
、LinkedList
等)来实现。它的作用是检查迭代器是否还有下一个元素。当集合中还有未被遍历的元素时,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();} }