int max = num.charAt(u) == '0' ? u + 1 : n;
时间: 2024-03-14 12:47:44 浏览: 22
这是一个三目运算符,可以简写为条件表达式。它的作用是:如果 num 字符串中第 u 个字符为 '0',则将 max 赋值为 u+1,否则将 max 赋值为 n。
可以理解为以下代码:
```
int max;
if (num.charAt(u) == '0') {
max = u + 1;
} else {
max = n;
}
```
相关问题
package main.mymath; import java.util.InputMismatchException; import java.util.Scanner; public class MyCalculator { //Addition public void add(int num1,int1 num2) { int result; result = num1 + num2; if(result > Integer.MAX_VALUE || result < Integer.MIN_VALUE){ throw new IllegalArgumentException("输入数字导致溢出"); }else { System.out.println(result); } } //Multiplication public void subtraction(double num1,double num2) { System.out.println(num1 - num2); } //Division public void divide(double num1,double num2) { if(num2==0) { throw new IllegalArgumentException("分母不能为零"); }else { System.out.println(num1 / num2); } } public void calc() { Scanner sc = new Scanner(System.in); System.out.println("premier nombre:"); int num1 = sc.nextInt(); System.out.println("deuxieme nombre:"); int num2 = sc.nextInt(); System.out.println("choix【+,-,/】"); char op = sc.next().charAt(0); switch (op) { case '+': add(num1, num2); break; case '-': subtraction(num1, num2); break; case '/': divide(num1, num2); break; default: System.out.println("erreur!"); break; } } public static void main(String[] args) { MyCalculator c = new MyCalculator(); c.calc(); } }
好的,根据你提供的代码,以下是一个可能的测试类示例:
```
package test.mymath;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
import java.io.ByteArrayInputStream;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
import java.util.Scanner;
import org.junit.Before;
import org.junit.Test;
import main.mymath.MyCalculator;
public class MyCalculatorTest {
private MyCalculator calculator;
@Before
public void setUp() {
calculator = new MyCalculator();
}
@Test
public void testAdd() {
assertEquals(5, calculator.add(2, 3));
assertEquals(-1, calculator.add(2, -3));
assertEquals(0, calculator.add(0, 0));
assertThrows(IllegalArgumentException.class, () -> calculator.add(Integer.MAX_VALUE, 1));
}
@Test
public void testSubtraction() {
assertEquals(2.0, calculator.subtraction(5.0, 3.0), 0.0);
assertEquals(-2.0, calculator.subtraction(-5.0, -3.0), 0.0);
assertEquals(0.0, calculator.subtraction(0.0, 0.0), 0.0);
assertEquals(0.1, calculator.subtraction(0.3, 0.2), 0.0);
}
@Test
public void testDivide() {
assertEquals(2.0, calculator.divide(6.0, 3.0), 0.0);
assertEquals(-2.0, calculator.divide(6.0, -3.0), 0.0);
assertEquals(0.0, calculator.divide(0.0, 1.0), 0.0);
assertThrows(IllegalArgumentException.class, () -> calculator.divide(6.0, 0.0));
}
@Test
public void testCalc() {
String input = "2\n3\n+\n";
System.setIn(new ByteArrayInputStream(input.getBytes()));
Scanner scanner = new Scanner(System.in);
calculator.calc(scanner);
assertEquals("5\n", systemOut().getHistory());
input = "5.0\n3.0\n-\n";
System.setIn(new ByteArrayInputStream(input.getBytes()));
scanner = new Scanner(System.in);
calculator.calc(scanner);
assertEquals("2.0\n", systemOut().getHistory());
input = "4.0\n2.0\n/\n";
System.setIn(new ByteArrayInputStream(input.getBytes()));
scanner = new Scanner(System.in);
calculator.calc(scanner);
assertEquals("2.0\n", systemOut().getHistory());
}
@Test
public void testCalcInvalidInput() {
String input = "invalid\ninput\n";
System.setIn(new ByteArrayInputStream(input.getBytes()));
Scanner scanner = new Scanner(System.in);
assertThrows(NoSuchElementException.class, () -> calculator.calc(scanner));
}
private SystemOut systemOut() {
return new SystemOut();
}
private static class SystemOut extends java.io.ByteArrayOutputStream {
public String getHistory() {
return new String(this.toByteArray());
}
}
}
```
在上面的测试类示例中,我们使用JUnit框架来测试MyCalculator类的三个方法:add(),subtraction()和divide(),并使用标准输入输出模拟用户交互,测试calc()方法是否能够正确的计算加、减、除三种运算。同时,我们还测试了一些输入无效数据的情况,来保证程序的健壮性。
字符串相加,给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和
好的,我知道了。可以通过模拟竖式计算的方式,对两个字符串形式的非负整数进行相加。具体步骤如下:
1. 将两个字符串 num1 和 num2 分别转化为整数数组 a 和 b,其中 a[0] 和 b[0] 分别为最高位上的数字。
2. 定义一个结果数组 res,长度为 max(a.length, b.length) + 1,用于存放相加的结果,初始值全为 0。
3. 从低位到高位遍历 a 和 b,同时维护一个进位 carry(初始值为 0)。对于每一位,将 a[i] 和 b[i] 相加,再加上上一位的进位 carry,将和 mod 10 的值存入 res[i + 1] 中,将和除以 10 的值更新 carry。
4. 遍历结束后,如果 carry 不为 0,则将其存入 res[0] 中,否则将 res[0] 赋为 0。
5. 将 res 数组转化为字符串形式,去掉开头的 0,即为相加的结果。
代码实现如下:
```
public String addStrings(String num1, String num2) {
int[] a = new int[num1.length()];
int[] b = new int[num2.length()];
for (int i = 0; i < num1.length(); i++) {
a[i] = num1.charAt(num1.length() - 1 - i) - '0';
}
for (int i = 0; i < num2.length(); i++) {
b[i] = num2.charAt(num2.length() - 1 - i) - '0';
}
int[] res = new int[Math.max(a.length, b.length) + 1];
int carry = 0;
for (int i = 0; i < res.length - 1; i++) {
int sum = carry;
if (i < a.length) {
sum += a[i];
}
if (i < b.length) {
sum += b[i];
}
res[i + 1] = sum % 10;
carry = sum / 10;
}
res[0] = carry;
StringBuilder sb = new StringBuilder();
boolean leadingZero = true;
for (int i = res.length - 1; i >= 0; i--) {
if (res[i] != 0) {
leadingZero = false;
}
if (!leadingZero) {
sb.append(res[i]);
}
}
return sb.length() == 0 ? "0" : sb.toString();
}
```