#!/bin/usr/perl -w
use strict;
print "Enter your input filename for original sample data values: \n";
chomp($data=<STDIN>);
print "Enter your input filename for adjustment values\n";
chomp($adj=<STDIN>) ;
print "Enter your output filename for resultant adjusted new sample data \n";
chomp($new=<STDIN>);
open(R1,"$data") or die("error");
open(R2,"$adj") or die ("error");
open(WW,"+>$new") or die ("error");
while( ($line1=(<R1>)) && ($line2=(<R2>)) )
{
$l1=$line1;
@arr1= split(" ",$l1);
$l2=$line2;
@arr2= split(" ",$l2);
$l= ( scalar@arr1);
$p= (scalar@arr2);
for ( $i = 0; $i <= $l; $i++ ){
for ( $j =($i+1); $j <= $l; $j++ ){
if ($arr1[$i]< $arr1[$j]){
$a = $arr1[$i] + ($arr2[$i]/2);
$b = $arr1[$j] - ($arr2[$i]/2);
push ( $arr1[$i]->$a , $arr1[$j]->$b);
}
elsif ( $arr1[$i]= $arr1[$j]){
$a = $arr1[$i];
$b = $arr1[$j];
push ($arr1[$i]->$a,$arr1[$j]->$b);
}
else{
$a = $arr1[$i]-($arr2[$i]/2);
$b = $arr1[$j]+ ($arr2[$i]/2);
push ($arr1[$i]->$a,$arr1[$j]->$b);
}
}
}
$l1 = scalar@arr1;
for ($k = 0; $k <= $l1 ; $k++)
{
if (($k % 10) != 0){
print WW "$arr1[$k]";
print WW "\t" ;
}
else {
print WW "\n";
print WW "$arr1[$k]";
print WW "\t";
}
}
}
close(R1);
close(R2);
close(WW);
exit;
当我运行这个编程时。我收到一个错误,“不是第29行的ARRAY引用”。
如何创建对我的第一个数组@arr1
的引用???以便在运行迭代后将元素的更改值存储在特定索引处。
输入:
@array1
1 2 3 4 5 6 7 8 9 10
@array2
1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2
期望的输出
@array1
15 1.5 2 3 6 4 11.5 5 5.5
答案 0 :(得分:0)
好吧,我没有得到你说你正在寻找的答案,但你想要做的就是将$ a的价值存入$ i&#39 ;数组@ arr1的索引和$ b的值@ arr1的$ jth索引。我已经从if分支中提取了赋值代码,因为它对于所有三种情况都是相同的。我还修复了你的条件中的一个微妙的错误。你有
elsif ( $arr1[$i]= $arr1[$j]){
但你肯定打算在这里进行相等比较而不是作业:
elsif ( $arr1[$i] == $arr1[$j]){
所以这是修改过的部分。正如我所说,它仍然没有打印出您所说的理想结果,而且我不确定是否因为您的计算错误或打印错误(我无法&#39) ; t找出从输入到所需输出的任何明显变换),但这至少应该让你朝着正确的方向前进:
for ( $i = 0; $i <= $l; $i++ ){
for ( $j =($i+1); $j <= $l; $j++ ){
if ($arr1[$i]< $arr1[$j]){
$a = $arr1[$i] + ($arr2[$i]/2);
$b = $arr1[$j] - ($arr2[$i]/2);
# push ( $arr1[$i]->$a , $arr1[$j]->$b);
}
elsif ( $arr1[$i] == $arr1[$j]){
$a = $arr1[$i];
$b = $arr1[$j];
# push ($arr1[$i]->$a,$arr1[$j]->$b);
}
else{
$a = $arr1[$i]-($arr2[$i]/2);
$b = $arr1[$j]+ ($arr2[$i]/2);
# push ($arr1[$i]->$a,$arr1[$j]->$b);
}
$arr1[$i] = $a;
$arr1[$j] = $b;
}
}