JS 的数字计算坑比较多的,浮点型的计算带有精度问题,所以通常先将浮点型变成整数进行计算,然后再以字符串的形式,变成浮点型输出。
大数字计算会变成科学计数法,JS 中,数字超过21位就会变成科学计数法,例如:8100824045303269669937 -> 8.100824045303269e+21
,这样会损失一些精度。
分析了一下排名第一的代码:
JS 的数字计算坑比较多的,浮点型的计算带有精度问题,所以通常先将浮点型变成整数进行计算,然后再以字符串的形式,变成浮点型输出。
大数字计算会变成科学计数法,JS 中,数字超过21位就会变成科学计数法,例如:
8100824045303269669937 -> 8.100824045303269e+21
,这样会损失一些精度。
分析了一下排名第一的代码:
String.prototype.reverse = function() {return this.split('').reverse().join('');}function sumStrings(a,b) {a = a.reverse(); b = b.reverse();var carry = 0; //进位var index = 0; //位数var sumDigits = []; //结果while (index < a.length || index < b.length || carry != 0) {var aDigit = index < a.length ? parseInt(a[index]) : 0;var bDigit = index < b.length ? parseInt(b[index]) : 0;var digitSum = aDigit + bDigit + carry;sumDigits.push((digitSum % 10).toString());carry = Math.floor(digitSum / 10);index++;}sumDigits.reverse();while (sumDigits[0] == '0') sumDigits.shift();return sumDigits.join('');}大体思路比较巧妙,先把数字倒过来然后按位计算,while 循环的条件用的很神。设置三个变量分别作为位数(index)、进位(carry)、结果(sumDigits),每次循环用 index 拿到对应位的数字加上上一个循环的进位,然后取10的余数以字符串形式存入结果数字,然后再取到本次运算的进位,下一个循环继续。最后处理输出即可。转载于:https://www.cnblogs.com/feixiablog/p/9026252.html
我试图将String作为参数从一个Java Aplications传递给Second作为StartUp参数
例如,我的Aplication必须在之前调用另一个Java Aplication(仅包含JOptionPane,JDialog或简单的JFrame)来启动,在System.exit(0);那里我尝试将一些描述从关闭应用程序发送到另一个应用程序,
这些代码是我尝试的模拟,并且以这种形式,代码可以正常工作,并将String显示到JTextArea中。
import java.io.IOException;
import java.util.concurrent.*;
public class TestScheduler {
public static void main(String[] args) throws InterruptedException {
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);
executor.setContinueExistingPeriodicTasksAfterShutdownPolicy(true);
executor.setExecuteExistingDelayedTasksAfterShutdownPolicy(true);
for (int i = 0; i < 10; i++) {
final int j = i;
System.out.println("assign : " + i);
ScheduledFuture> future = executor.schedule(new Runnable() {
@Override
public void run() {
System.out.println("run : " + j);
}
}, 2, TimeUnit.SECONDS);
}
System.out.println("executor.shutdown() ....");
executor.shutdown();
executor.awaitTermination(10, TimeUnit.SECONDS);
try {
Process p = Runtime.getRuntime().exec("cmd /c start java -jar C:\\Dialog.jar 'Passed info'");
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.println("System.exit(0) .....");
System.exit(0);
}
private TestScheduler() {
}
}
//
import java.awt.*;
import java.util.ArrayList;
import javax.swing.*;
编写通用方法countlets(),返回以参数形式传递的字符串中的字母数。返回的计数中应该不包括数字、空格、标点符号和换行符等。
package ex7; /** * @content:编写通用方法countlets(),返回以参数形式传递的字符串中的字母数。返回的计数中应该不包括数字、空格、标点符号和换行符等。 * @author:卡面来打 */ import java.util.Scanner; public class Demo02 { public static int countlets(String str) { int countNum=0; char[] Array=str.toCharArray(); for(int i=0;i<str.length();i++) { //判断字符数组中有多少个字母 if('a'<=Array[i]&&Array[i]<='z'||'A'<=Array[i]&&Array[i]<='Z') { countNum++; } else { continue; } } return countNum; } public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.println("请输入字符串:"); String str=sc.next(); System.out.println("您输入的字符串中字母有"+countlets(str)+"个"); sc.close(); } }
运行结果:
记录一下。
Exception的printStackTrace来自于Tthrowable,android下只支持两种方式
printStackTrace(PrintStream err)
printStackTrace(PrintWriter err)
所以没法直接把StringWriter作为参数传递给printStackTrace()获取stackTrace的字串。
通过查找code发现,java.io.StringWriter和java.io.PrintWriter均继承自java.io.Writer;
其中PrintWriter提供以Writer接口作为输入参数的构造函数PrintWriter(Writer wr)
所以可以通过使用StringWriter构造PrintWriter,然后借这个壳去给printStackTrace,就能把stackTrace以字串形式抓出来了。
smaple如下:
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
Exception fe = new Exception();
fe. printStackTrace(pw);
log(sw.toString());